请问C#中实例方法和静态方法到底有什么区别

小编 625

C#中实例方法和静态方法的区别在于:1.调用方式不同;2.调用时命名方式不同;3.使用条件不同;4.内存分配不同。存在条件不同是指,实例方法在对象存在后才能使用,是类的实例来调用;而静态方法则只与类有关,是类来调用。

1.调用方式不同

实例方法则在对象存在后才能使用;静态方法则只与类有关,它不依赖于对象的存在而存在。因此,实例方法是类的实例来调用;而静态方法是类来调用。

2.调用时命名方式不同

在外部调用静态方法时,可以使用”类名.方法名”的方式,也可以使用”对象名.方法名”的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。

3.使用条件不同

从面向对象的角度来说,在抉择使用静态方法还是实例化方法,应该依据这个方法和实例化对象是否有逻辑关系。如果方法与实例化对象有逻辑关联性,则使用实例化方法;但如果方法与实例化对象没有逻辑关联性,则使用静态方法。

4.内存分配不同

一般认为静态方法常驻内存,实例方法只有在使用时才分配内存。但事实上,是一样的,都是在类被加载时常驻内存。static方法和non-static方法在创建实例对象时,属性的值对各个对象各不相同(每个实例对象的所有字段在内存中有一个拷贝,用于区分操作哪个对象的字段),new一个实例时,会把实例属性放在GC Heap里面,同时new的对象放在堆栈上,堆栈指针指向刚才拷贝的的内存地址;而静态方法中的静态字段只有一份;对于static和non-static方法代码都是一样的,所以只需要一份代码,占用一份内存空间。调用速度上因实例方法需要实例化分配内存,静态方法则不用,故静态方法会快一点,但也可忽略不计。

总体来看,静态方法用在与类中属性无关的函数,而实例化方法用在与类中属性有关的函数。而在真实的实践当中也证明,静态方法的调用并不比实例化方法效率更高。

延伸阅读

C#中方法定义的注意事项

名列前茅,访问修饰符。访问修饰符表示方法的可访级别。修饰符可以省略,默认private,可以根据需要定义为public。

第二,返回值类型。方法执行后,如果不返回任何数据,使用void表示即可。如果返回数据,则该数据的类型,就是返回值的类型,可以是int,double、string、bool等。

第三,方法名。方法名一般是“动词”或“动宾短语”,采用Pascal命名法。

第四,参数列表。方法参数根据需要添加,也可以省略。参数名要求以“类型”、参数名、形式,使用逗号分隔。

第五,方法的主体。方法的主体表示方法执行的具体过程,根据需要编写。

第六,方法的返回值。方法返回数据的时候,最后使用return返回,return后面不应该有任何语句。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部