次の方法で共有


構造体の設計

このコンテンツは、 フレームワーク設計ガイドライン (再利用可能な .NET ライブラリの規則、イディオム、パターン、第 2 版) から、Pearson Education, Inc. のアクセス許可によって再印刷されます。 そのエディションは2008年に出版され、その後 、本は第3版で完全に改訂されています。 このページの情報の一部が古くなっている可能性があります。

汎用値型は、多くの場合、構造体、その C# キーワードと呼ばれます。 このセクションでは、一般的な構造体設計のガイドラインを示します。

❌ 構造体にパラメーターなしのコンストラクターを指定しないでください。

このガイドラインに従うと、配列の各項目でコンストラクターを実行しなくても、構造体の配列を作成できます。 C# では、構造体がパラメーターなしのコンストラクターを持つことが許可されていないことに注意してください。

❌ 変更可能な値の型は定義しないでください。

変更可能な値型には、いくつかの問題があります。 たとえば、プロパティゲッターが値型を返すと、呼び出し元はコピーを受け取ります。 コピーは暗黙的に作成されるため、開発者は、元の値ではなく、コピーを変更していることを認識していない可能性があります。 また、一部の言語 (特に動的言語) では、ローカル変数であっても逆参照するとコピーが作成されるため、変更可能な値型の使用に問題があります。

✔️ すべてのインスタンス データが 0、false、または null (必要に応じて) に設定されている状態が有効であることを確認してください。

これにより、構造体の配列が作成されたときに無効なインスタンスが誤って作成されるのを防ぐことができます。

✔️ 値型に IEquatable<T> を実装します。

値型の Object.Equals メソッドはボックス化を引き起こし、その既定の実装はリフレクションを使用するため、あまり効率的ではありません。 Equals は、パフォーマンスが大幅に向上し、ボックス化を引き起こさないように実装できます。

ValueTypeを明示的に拡張しないでください。 実際、ほとんどの言語ではこれを防ぎます。

一般に、構造体は非常に便利ですが、頻繁にボックス化されない小さな単一の変更できない値にのみ使用する必要があります。

Portions © 2005, 2009 Microsoft Corporation. 無断転載を禁じます。

フレームワーク設計ガイドライン:再利用可能な .NET ライブラリの規則、イディオム、パターン、Krzysztof Cwalina および Brad Abrams による第 2 版は、2008 年 10 月 22 日に Microsoft Windows 開発シリーズの一部として Addison-Wesley Professional によって公開されました。

こちらも参照ください