独自の静的な空またはゼロフィールドを適切に実装するにはどうすればよいですか
-
06-07-2019 - |
質問
クラスがあります。このクラスは空にすることができます。このクラスには、String型のパブリックプロパティのみがあります。このクラスが空の状態の場合、すべてのプロパティの値がString.Emptyになっていることを意味します。
1)public static フィールドを使用すると、Class.Emptyのプロパティを変更できます。
2)public static property ゲッターが毎回新しい空のオブジェクトを返す(すべてのフィールドを空にする手動)べきだとは思わない。その悪い習慣を考慮します。
3)別の解決策は、独自の Class。 IsNullOrEmpty (Class obj)を実装することです。
4)非静的 public booleanプロパティ obj。 IsEmpty 。
このクラスが使用されている他のクラスでは、プロパティがnullになることはありません。 他のクラスは、適切に初期化する(さらに別のクラスの)メソッドから返されます。
プロパティがnullである可能性があるのは、そのメソッドの外部でプロパティが新規に更新された場合のみです。これにより、とにかく無効な状態になります。
解決
1と2の競合、基本的に。
どちらの型も不変です。この場合、毎回同じインスタンスへの参照を返すことができます...または、その場合は新しいオブジェクトへの参照を返す 可変です。毎回。
string.Empty
が適切である理由は、 string
が不変であるためです。
あなたのタイプは変更可能ですか?
編集:コメントに基づいて、プロパティにセッターを含めるべきではないようです。代わりに、値をコンストラクターに渡し、読み取り専用フィールドに保存する必要があります。
その時点では型は不変なので、常に同じ値を返すパブリックフィールドまたはプロパティを公開できます。つまり、
private static readonly MyType empty = new MyType("", ""); // Or whatever
public static MyType Empty { get { return empty; } }
または
public static readonly MyType Empty = new MyType("", "");
セッターがないため、プロパティを設定する人を心配する必要はありません...