为什么静态类的成员需要声明为静态?为什么不是隐含的?

ric*_*ard 24 .net c# implicit static-members static-classes

显然,静态类上不能有实例成员,因为该类永远不会被实例化.为什么我们需要将成员声明为静态?

Eri*_*ert 44

我总是被问到这样的问题.基本上问题归结为"当一个关于声明成员的事实可以由编译器推断出来时,该事实的明确声明是否需要(1),(2)是可选的,还是(3)被禁止?"

没有一个简单的答案.每个人都必须根据具体情况进行.将"static"放在静态类的成员上是必需的.将"new"放在派生类的隐藏,非重写方法上是可选的.禁止在const上加"static".

简单地考虑一下你的情景,让它被禁止似乎很奇怪.你有一整个类标有"静态"的方法.您决定使类静态,这意味着您必须删除所有静态修饰符?那真是怪了.

让它成为可选的似乎很奇怪; 假设你有一个静态类和两个方法,一个标记为静态,一个不标记.由于静态通常不是默认值,因此很自然地认为它们之间存在差异.使其成为可选项似乎可能令人困惑.

这使它成为必需,作为三个选项中最不好的.

有关这些问题的更多信息,请参见http://blogs.msdn.com/b/ericlippert/archive/2010/06/10/don-t-repeat-yourself-consts-are-already-static.aspx.


soa*_*dos 5

因为根据定义,他们的所有成员都必须是静态的.他们决定不给出一些令人困惑的语法糖.