C#構造とクラスの選択:構造はいつ使用されますか?
はじめに
開発者の中で、構造の使用は常に議論の余地のあるトピックです。この記事は、ベストプラクティスと実用的な例に従って構造を考慮する必要がある時期を導くことを目的としています。
マイクロソフトの提案
第3パーティのリソースにのみ依存する代わりに、貴重な洞察を提供できる構造の使用に関するMicrosoftの公式の立場を参照する方が良いです。
小さな、短い、または埋め込まれたオブジェクトの場合、構造の使用を検討してください。
-
次の条件が満たされない限り、構造は回避されます。
は、gm のタイプと同様に、単一の値を表します。
- サンプルサイズは16バイト未満
です
それは不変です
最小ボクシング需要
-
-
Microsoftの実際の逸脱-
興味深いことに、Microsoftの内部コードはこれらのルールに違反することがあります。これは、これの柔軟性と実際的な理由を示しています。たとえば、- は内部構造を使用してパフォーマンスを改善し、インターフェイスの実装の要件を満たします。
ルールの改善
実際の使用に関するMicrosoftの提案と検査によると、次の改善が現れました。
値の構造の構造:
構造体は、要素のタイプと同様に、単一または限られた値を持つ論理単位を示す必要があります。
Dictionary<TKey, TValue>
パフォーマンスを考慮してください:
構造のタイプ特性により、パフォーマンスを改善し、参照タイプに関連する費用を回避できます。
変動性とボクシングを避けてください:
構造は通常不変であるべきであり、パフォーマンスの低下を避けるために頻繁に箱に入れないでください。
インターフェイスを慎重に使用します。- 実装インターフェイスの構造は参照タイプになり、ボクシングオーバーヘッドを生成する可能性があります。
実際の例:辞書の実装-
クラスは、構造の使用の説明例を提供します:
- 内部構造およびは、単一の値を表します。
- パフォーマンスを最適化し、頻繁にボクシングを避けるために使用されます。
ただし、特定の実装要件を満たすために、不可欠な規則とインスタンスサイズの規則に違反しています。
クラスとの比較
構造とクラスのパフォーマンスの違いを理解するために、300,000メートルを含む辞書の次の操作を検討してください:
構造の使用のパフォーマンスは、より速い調整の観点から明らかであり、値タイプの効率を証明しています。ただし、初期化構造の参照タイプは、追加のパフォーマンスコストを生成します。
結論
構造またはクラスがアプリケーションの特定の要件に依存するかどうか。価値指向のオブジェクトの場合、構造はパフォーマンスの利点と論理的な結束を提供します。議論の原則を慎重に、そして実際の影響を考慮して、開発者は構造を効果的に使用してC#コードライブラリを強化することができます。
以上がC#のstructs vs.クラス:いつ構造を選択する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。