7

我创建了一个 C#Windows Runtime组件,以及以下行:

public const bool LOG_ENABLED = false;

正在引发错误:

“Constants”类型包含外部可见的常量字段“Constants.LOG_ENABLED”。常量只能出现在 Windows 运行时枚举中

这个错误是什么意思?我怎样才能声明常量?

4

1 回答 1

5

这是一个老问题,但我不会少给我两分钱。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 或只读,因为在普通类库中是可能的。

经过一番阅读,似乎公共字段仅限于结构,而结构可能只包含公共字段。

正如您在评论中所说,如果您不从外部来源使用它,将其更改为内部是一个不错的选择。

于 2015-03-05T16:42:37.343 回答