[解決済み] C#: List<T> と Collection<T> の違い (CA1002、汎用リストを公開しない) [duplicate]
質問
ここのプロジェクトでコード解析を実行しようとしたところ、このような内容の警告が多数表示されました。
CA1002 。Microsoft.Design .NET List< を変更します。 SomeType >'を' SomeClass.SomeProtectedOrPublicProperty。 ' で、Collection、ReadOnlyCollection、KeyedCollectionのいずれかを使用します。
なぜ
Collection<T>
の代わりに
List<T>
? msdnのドキュメントを見ると、両者はほぼ同じようです。警告のエラーヘルプを読んだ後、私は次のことを発見しました。
System.Collections.Generic.List(T)_is a generic collection designed for performance not inheritance and therefore, does not contain any virtual members.System.Collections.Generic.List(T)_is a generic collection designed for performance not inheritance and therefore, not contain any virtual members.
しかし、これは本当に意味があるのでしょうか?そして、代わりに何をすべきなのでしょうか?
を使い続けるべきなのでしょうか?
List<T>
を内部で使い続け、プロパティで
new Collection<T>(someList)
を返しますか?それとも
Collection<T>
の代わりに
List<T>
?
どのように解決するのですか?
要するに、汎用リストは拡張性ではなく高速性を重視して設計されているため、AddやRemoveなどの仮想メソッドを持ちません。これは、この具象実装を有用なサブクラスに交換できないことを意味します (シールされていないためサブクラス化できるにもかかわらず)。
したがって、リスト自体を公開することによって、クラスの公開契約を破ることなく、追加または削除操作を追跡するためにコレクションを拡張することは決してできません (たとえば、)。
IList またはそのようなものとしてコレクションを公開することによって、実際のバッキングストアとしてまだ List を使用することができますが、クラスのパブリック契約を変更せずに後で具体的な実装を交換することができるので、将来の拡張性を保持します。
関連
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] フィールドとプロパティの違いは何ですか?
-
[解決済み] 2つの日付の差(日数)を計算する?
-
[解決済み] SelectとSelectManyの違い
-
[解決済み] 私的相続、公的相続、保護相続の違いについて
-
[解決済み] キーワード「ref」と「out」の違いは何ですか?
-
[解決済み] Collection<T> vs List<T> インターフェースで使うべきものは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】「namespace x already contains a definition for x」エラーの修正方法は?VS2010にコンバートした後に発生しました。
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み] 関数を終了するには?
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。
-
[解決済み】スレッド終了またはアプリケーションの要求により、I/O操作が中断されました。
-
[解決済み] Collection<T> vs List<T> インターフェースで使うべきものは?