为什么不对所有私有方法使用静态方法?

Dav*_*ave 7 .net static

我试图理解静态方法,我已经达成了一个令人困惑的问题.

仅关注此问题的方法,如果我创建了我的对象的实例(其中类本身不是静态的),那么我通常只能访问public,protected和/或内部方法(取决于范围/封装).换句话说,我无法访问私有方法.

我已经读过,虽然最小的静态方法比非静态方法稍微有效.

因此,在创建返回类型为void的私有方法时,并在从内部创建对象的引用时排除,为什么不将它设置为静态?我见过的所有代码都没有这样做,所以我只能假设我错过了这一点.

Bat*_*eba 29

静态方法无法访问类中的非静态成员数据.


Mat*_*eid 6

静态方法通常被认为是无状态的,因此无法访问实例状态.相反,实例方法是有状态的,因此可以读取和修改实例的状态.

无状态方法的典型示例是:

  • 工厂方法
  • 二元运算符
  • ...

当然,静态方法并不总是无状态的,有静态有状态方法的样本.这个类一个单一的状态:

  • 独生子
  • 实例池
  • ...

这些实现需要稍微小心,因为类的状态也由进程内的所有线程共享.