7

C#Windows Runtimeコンポーネントと次の行を作成しました。

public const bool LOG_ENABLED = false;

エラーをスローしています:

タイプ「Constants」には、外部から見える定数フィールド「Constants.LOG_ENABLED」が含まれています。定数は、Windows ランタイム列挙型にのみ表示できます

このエラーはどういう意味ですか? また、定数を宣言するにはどうすればよいですか?

4

1 に答える 1

5

これは古い質問ですが、私の 2 セントを差し引いても差し支えありません。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 コンポーネント ライブラリで public const または readonly を使用できない理由が正確にはわかりません。

いくつか読んだ後、パブリックフィールドは構造体に限定されており、構造体にはパブリックフィールドのみが含まれている可能性があるようです。

コメントで言ったように、外部ソースから使用しない場合は、内部に変更することをお勧めします。

于 2015-03-05T16:42:37.343 に答える