0

.NET型System.Versionのメンバーを見ると、参照型(クラス)ではなく、値型(C#構造体)などの型を作成する方がよい場合があります。

マイクロソフトがそのタイプをそのように実装することを決定した理由または議論は何でしょうか?それは単に一種の「バグ」/間違い/結果ではないのか、それとも「機能」(言い換えれば、「本当に欲しくて便利」なのか)ですか?

System.Int32System.DoubleSystem.Guidなどの値型に一般的なParse()TryParse( )のようなメソッドがあります。System.Versionのプロパティは、短い値と整数値(s。System.TimeSpan)のみを格納し、型自体は(演算子を使用して)比較可能であり、構造体としてクローン可能にする必要がない場合があります

私はその「現状」に反対するものは何もありません、それは私の好奇心を満たすためだけです;-)

編集:System.TimeSpanへの比較を追加しました。

4

3 に答える 3

2

はっきりとは言えませんが、理由の1つは不変性である可能性があります。クラスのプロパティVersionはすべて読み取り専用です。構造体でフィールドを宣言することは可能ですが、Eric Lippertは、構造体フィールドでの読み取り専用は嘘であるとreadonly指摘しています。

それをクラスにすることで、不変性が保証されます。

于 2011-10-12T20:39:51.493 に答える
2

Microsoft独自のガイドラインによると、インスタンスが16バイト以上の場合は、構造よりもクラスを優先する必要があります。それぞれが4バイトで合計16バイトで構成される4つのInt32を格納するためSystem.Version、彼らは独自のアドバイスに従い、それをクラスにしました。

于 2011-10-12T20:54:36.140 に答える
1

設計プロセスに関連している可能性のあるもう1つのポイントは、VersionComVisibleです。

そのため、COM構造体(C構造体のようなメモリ内レイアウトを指定する)としてではなく、コクラス(動作、内部レイアウトについての保証なし)としてCOMに公開する方が理にかなっています。

于 2011-10-13T05:53:55.143 に答える