类型声明是隐式静态成员

本文关键字:静态成员 声明 类型 | 更新日期: 2023-09-27 18:31:29

我认识的人刚刚让我解释MSDN的这个声明,我傻眼了。

常量或类型声明隐式是静态成员。

短语"或类型声明隐式地是一个静态成员"对我来说毫无意义。

那是什么意思?

类型声明是隐式静态成员

对我来说,

type declaration is implicitly a static member是有道理的.
因为如果你有类:

class Foo
{
   public class Bar
  {
  }
}

您不能通过以下方式访问类Bar

Foo f = new Foo();
Bar b =new f.Bar();

(我什至不确定如何写它才能使其有意义)。
如果要访问Bar类,则需要执行以下操作:

Bar b = new Foo.Bar()

您可以通过类而不是实例访问它。
因此,BarFoo的静态成员。

在本文的上下文中,我相信他们将类型定义为简单的内部struct s,内部class es和enum s的定义 - 它们始终可以在静态上下文中作为类型引用。

这意味着当你定义这样的类时,

 public class Message
    {
        const int i = 10;
        enum NewType{ typeval, typevale2 }

    }

在这里,两者都是隐式静态成员。

Const 是隐式静态的,但它与普通静态字段的不同之处在于它在程序执行期间不能更改。虽然它仍然是静态的。

类型声明

类型声明是类声明(第 10.1 节)、结构声明(第 11.1 节)、接口声明(第 13.1 节)、枚举声明(第 14.1 节)或委托声明(第 15.1 节)。

类型声明 MSDN 文档

静态成员

当字段、方法、属性、事件、运算符或构造函数声明包含静态修饰符时,它将声明静态成员。此外,常量或类型声明隐式声明静态成员。静态成员具有以下特征:

  • 当在形式 E.M.的成员访问(第 7.5.4 节)中引用静态成员 M 时,E 必须表示包含 M 的类型。E 表示实例是一个编译时错误。
  • 静态字段仅标识一个存储位置。无论创建多少个类实例,静态字段都只有一个副本。
  • 静态函数成员
  • (方法、属性、事件、运算符或构造函数)不对特定实例进行操作,在此类函数成员中引用此函数成员是一个编译时错误。

静态和实例成员 MSDN 文档

所以这意味着Constants和所有类型的Type declaration都是静态的,没有添加关键字static