これは構造体の良い候補ですか?
コンストラクターが入力を検証し、検証されたデータを単一の「ルーティングコード」として格納する、この不変の構造体の例を考えてみます。
struct RoutingCode
{
private readonly string routingCode;
RoutingCode(string prefix, string service, string sender)
{
// Validate prefix, service, sender strings
// ...
if (isInvalid) throw ArgumentException();
//
this.routingCode = prefix + service + sender;
}
// Gets the validated routing code.
public string Routing
{
return this.routingCode;
}
public int RoutingLength
{
return this.routingCode.Length;
}
}
この簡略化された例は、 :のstruct
代わりに使用するのに適した候補であるように思われます。class
- 不変です。
- 特異値を表します。
- インスタンスサイズが小さい。
問題は、すべての構造体に暗黙のデフォルトコンストラクターがあることです。この例では、デフォルトのコンストラクターは、プロパティが返さRoutingCode()
れるオブジェクトをインスタンス化します。これは無効なルーティングコードです。これは、バッキングフィールドにデフォルトインスタンスの非常に論理的で有効な「ゼロ」が含まれているなどの他の構造体とは異なります。Routing
null
Point
BigInteger
有効なルーティングコードを保証しないことに加えて、プロパティはデフォルトのインスタンスで呼び出された場合にaRoutingLength
をスローします。NullReferenceException
これを維持するための議論とstruct
それを作るための議論は何class
ですか?