c# - 为什么静态类的成员需要声明为静态的?为什么它不只是隐含的?

标签 c# .net static-members implicit static-classes

显然,静态类不能有实例成员,因为该类永远无法实例化。为什么我们需要将成员声明为静态的?

最佳答案

我总是被问到这样的问题。基本上,问题归结为“当编译器可以推断出关于已声明成员的事实时,该事实的显式声明应该是 (1) 必需的,(2) 可选的,还是 (3) 禁止的?”

没有一个简单的答案。每个人都必须根据具体情况采取。需要将“静态”放在静态类的成员上。将“new”放在派生类的隐藏、非覆盖方法上是可选的。禁止将“static”放在 const 上。

简要考虑您的情况,禁止它似乎很奇怪。你有一个充满标记为“static”的方法的类。您决定将类设为静态,这意味着您必须删除所有静态修饰符?这很奇怪。

让它成为可选的似乎很奇怪;假设您有一个静态类和两个方法,一个标记为静态,一个不是。由于 static 通常不是默认值,因此认为它们之间存在差异似乎很自然。将其设为可选似乎可能会造成混淆。

这使得它成为必需的,这是三个选项中最不糟糕的。

参见 http://blogs.msdn.com/b/ericlippert/archive/2010/06/10/don-t-repeat-yourself-consts-are-already-static.aspx对这类问题有更多想法。

关于c# - 为什么静态类的成员需要声明为静态的?为什么它不只是隐含的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6005109/

相关文章:

c# - ListView : Enable text trimming instead of HorisontalScrollBar

c++ - 如何初始化模板方法中使用的静态类成员?

c# - 将 PowerShell 包添加到 .netstandard2.0 类库

c# - 将基类转换为派生类时不会在编译时抛出错误

asp.net - IF 运算符与 If、then、else 之间的计算差异

c# - 自托管 wcf 添加服务引用

.net - 引用和命名空间如何工作?

c++ - 使用 boost::program_options 作为类的静态成员

class - 静态成员上的 Groovy getProperty()

c# - 使用 docker 容器化 .net c# WPF 应用程序