このようにパブリックフィールドを公開することはできますが、私は公開したくないと思います。プロパティのままにしておくと、後で実装を変更できます。たとえば、後でシングルトンを初期化せずに呼び出すことができる静的メソッドを追加するとします。プロパティバージョンを使用して、コードを次のように変更できます。
public sealed class MyClass
{
public static MyClass Instance { get { return InstanceHolder.instance; } }
private MyClass() {}
private static class InstanceHolder
{
internal static readonly MyClass instance = new MyClass();
}
public static void Foo()
{
// Calling this won't initialize the singleton
}
}
(元のバージョンでは、シングルトンが初期化される場合とされない場合があります。CLR次第です。)
これは、後で実装を変更したい理由の一例にすぎません。プロパティを使用すると、それを実行できます。フィールドを使用すると、実行できません。