我创建了一个 C#Windows Runtime
组件,以及以下行:
public const bool LOG_ENABLED = false;
正在引发错误:
“Constants”类型包含外部可见的常量字段“Constants.LOG_ENABLED”。常量只能出现在 Windows 运行时枚举中
这个错误是什么意思?我怎样才能声明常量?
我创建了一个 C#Windows Runtime
组件,以及以下行:
public const bool LOG_ENABLED = false;
正在引发错误:
“Constants”类型包含外部可见的常量字段“Constants.LOG_ENABLED”。常量只能出现在 Windows 运行时枚举中
这个错误是什么意思?我怎样才能声明常量?
这是一个老问题,但我不会少给我两分钱。const 和 public 是一个危险的组合,经常被漏用。这是因为如果库中的公共 const 字段发生更改,则不能仅仅替换库,而是需要重建该库的所有客户端,因为它会复制客户端中的实际值而不是引用到那个值。
如果你真的想要一个公共的“常量”,一种选择是做这样的事情:
public static class Constants
{
public static readonly bool LOG_ENABLED = false;
}
但是,这在 WinRT 组件库中也失败了
“WindowsRuntimeComponent1.Constants”包含外部可见字段“System.Boolean WindowsRuntimeComponent1.Constants.LOG_ENABLED”。字段只能由结构公开。
另一个确实有效的替代方案是
public static class Constants
{
public static bool LOG_ENABLED { get { return false; } }
}
我不确定为什么在 WinRT 组件库中不可能有公共 const 或只读,因为在普通类库中是可能的。
经过一番阅读,似乎公共字段仅限于结构,而结构可能只包含公共字段。
正如您在评论中所说,如果您不从外部来源使用它,将其更改为内部是一个不错的选择。