C#的静态方法和实例化方法的区别

C#的静态方法和实例化方法的区别

在大多数时候,我们写一个方法,会把方法区分为实例化方法和静态方法。而当被问到静态方法和实例化方法的区别的时候,我在写这篇文章的前10分钟,或许我会回答:“静态方法无需实例化(即不使用关键字new)即可直接被调用

  • 静态方法和实例方法,在加载时机上是一样的,在类型第一次被使用的时候加载,调用的速度基本上没有差别
  • 静态方法和实例化方法在本质上都是方法,所以在内存中,无论是静态方法还是实例化方法,在内存中都只保存一份
    • 而且代码中的所有方法都会保存在一个特定的区域
  • 如果一个方法,与他所在的类的事例对象无关,那么它就应该是静态的,而不应该把它写成实例方法。
  • 从面向对象的角度来说,在抉择使用静态方法还是实例化方法,应该依据这个方法和实例化对象是否有逻辑关系
    • 如果方法与实例化对象有逻辑关联性,则使用实例化方法
    • 如果方法与实例化对象没有逻辑关联性,则使用静态方法

为什么要把方法分为静态方法和实例化方法?

早期的结构化编程,几乎所有的方法都是“静态方法”,而直到面向对象编程语言来临时,才被区分为了实例化方法和静态方法。而这样的区分,并不是单一从性能的角度进行考虑的,而是为了让开发更加模式化,面向对象化。

比如说人这个类,姓名、年龄等,这些属性就必须是实例化属性,而所属科目,比如灵长类,则一定是静态属性,因为这个属性并不依赖于某一个人

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

上一篇:面向对象编程(二)封装--构造方法,this关键字,static关键字,方法重载


下一篇:Spring还使用基于 JSR-250 注释,它包括 @PostConstruct, @PreDestroy 和 @Resource 注释