【问题标题】:Why const member syntax behaves like static members of a class为什么 const 成员语法表现得像类的静态成员
【发布时间】:2016-12-06 09:39:23
【问题描述】:

今天我试图声明一个静态变量EmployeeMaxAge,如下代码所示:

namespace NewApplication
{
    public class CommonConstants
    {
        public const int EmployeeMaxHeightInCm = 160;
        public static int EmployeeMaxAge = 50; //new static member
    }
}

当我尝试在我的主要方法中将它用作 CommonConstants.EmployeeMaxAge 时,我突然发现智能感知也在智能感知下拉列表中显示 EmployeeMaxHeightInCm(它没有静态修饰符)。于是我在代码中改写了CommonConstants.EmployeeMaxHeightInCm,看到它正在编译运行成功。我一直都知道ClassName.MemberName 语法仅适用于类的静态成员,但相同的语法也适用于 const 成员。有人可以帮我理解 C# 语言的这种行为吗?

【问题讨论】:

  • 此语法对const 成员也有效。为什么你不这么认为?你有没有说类类型标识符上只有静态成员可用?
  • 另请注意,您放置//new constant 的成员声明实际上不是常量,而是带有初始值设定项的静态可变字段。请确保我们在这里谈论的是同样的事情。
  • @LasseV.Karlsen。真的。我修改了我的问题。我没有添加一个 const 而是一个公共静态成员。
  • @LasseV.Karlsen 我一直只通过ClassName.MemberName 语法访问静态成员。我不确定是否还有其他类结构也可以使用这种语法。
  • 您至少可以访问静态成员(包括 const 成员)、嵌套类型。在我的脑海中,我不确定是否还有其他对于 Type.Name 语法是合法的。

标签: c# static constants


【解决方案1】:

答案是:因为这是 C# 标准定义常量字段的方式。

来自10.4 常量部分:

即使常量被认为是静态成员,常量声明既不需要也不允许静态修饰符。

...

常量的值是在表达式中使用简单名称(第 7.6.2 节)或成员访问(第 7.6.4 节)获得的。

【讨论】:

    猜你喜欢
    • 2017-10-11
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多