私は、ジョンとは少し異なる方向からこれにアプローチします。オブジェクトがシングルトンであるかどうかに関係なく、そもそもプロパティとしてモデル化するのが論理的に最適ですか?
プロパティは...プロパティを表すはずです。(Captain Obvious が再びストライキ!) ほらね。色。長さ。身長。名前。親。物事のプロパティであると論理的に見なすすべてのもの。
論理的にsingletonであるオブジェクトのプロパティを思いつきません。私が思いもよらなかったシナリオを思いついたかもしれません。今朝はまだダイエットドクターペッパーを食べていません。しかし、これはモデルのセマンティクスの乱用ではないかと疑っています。
シングルトンとは何か、それが何かのプロパティであると考える理由を説明できますか?
とはいえ、私自身もこのパターンを頻繁に使用しています。通常は次のようにします。
class ImmutableStack<T>
{
private static readonly ImmutableStack<T> emptystack = whatever;
public static ImmutableStack<T> Empty { get { return emptystack; } }
...
「空」は論理的に不変スタックのプロパティですか? いいえ。ここで言うことができることの魅力的な利点
var stack = ImmutableStack<int>.Empty;
プロパティが論理的にプロパティであるという私の願望に勝っています。言って
var stack = ImmutableStack<int>.GetEmpty();
奇妙に思えます。
この場合、読み取り専用フィールドと通常のプロパティを持つ方が良いのか、静的 ctor と autoprop を持つ方が良いのかは、そもそもそれをプロパティにするかどうかほど興味深い問題ではないように思えます。「純粋主義者」の気分で、私はおそらくジョンの側にいて、それを読み取り専用フィールドにします。しかし、怠け癖から、論理的に不変のオブジェクトに対してプライベート セッターを使用して autoprops を作成するパターンもよく使用します。
質問のすべての側面を取るのはどうですか?