カスタムコレクションを持つC#でプログラムを作成しています。カスタムコレクションは、ResultInfo型のメンバー上でいくつかの便利な集計関数(AllSuccessful、%Successfulなど)を実行します。私はResultInfo(UploadResultInfo、XUploadResultInfo、およびYUploadResultInfo)から派生し、追加の集約関数を持つResultInfoCollectionを継承する追加のコレクションを持つことを望むいくつかのクラスを持っています。指定された通りにこれを行うことによる唯一の問題は、それが無用のままになることである。コレクション上では、役に立たないままになることが唯一の問題である。 説明:このメソッドはResultInfo型の引数をとりますが、UploadResultInfoCollectionにResultInfoを追加するとエラーが発生します。私の問題を解決するうまい方法がありますか?私はジェネリックスを考えましたが、どのように動作するのかはよくわかりません。継承されたコレクションを設計する方法
答えて
後で、ちょうどそれらを使用してみてください
MyCollection<FooResultInfo> coll = new MyCollection<FooResultInfo>();
でそれを使用することができますに、彼らはあまりにもでないあなただけの
public class MyCollection<T> : ICollection<T>
where T : ResultInfo
{
... the required methods ... just use "T" instead of "ResultInfo" ...
public void Add(T item) {}
}
のようにそれを定義ResultInfoの子を扱う一般的なクラスを定義します難しく学習することが最良の方法です...
私はこのアイデアを試してみる必要がありますが、それはよさそうです。 –
役に立たないAddメソッドをどのように残しているか分かりません。
コレクションに自身が移入する場合は、Addメソッドをprivateにできます。
継承された追加コレクションでAddメソッドが公開されないようにするには、継承の代わりにcompositionを使用します。
一般にaddメソッドは役に立たないわけではありません。しかし、私は彼らがUploadResultInfoCollectionにResultInfoを追加したくないので、多くの場合、public void Add(ResultInfo ri)がエラーをスローします。 –
あなたの役に立つメソッドが実際にインスタンスメソッドである必要があるかどうかを検討してください。
他の操作が発生したとき、または公開されている(または内部で利用可能な)APIを使用してすべての状態を維持できる必要がありますか?
もしそうなら、単純にそれらを静的メソッドにしてください(拡張メソッドはおそらく良いアイデアです)、継承については心配しないでください。メソッドがIEnumerable <T>
で有意義であれば、このようにすれば、ユーティリティ関数を非常に使いやすく、有用なものにすることができます。
結果の関数パッケージを使用するには、関連する名前空間をインポートするだけで済みます。
既存のコレクションタイプに追加のメソッドを追加するだけの場合は、そのタイプの拡張メソッドを定義し、通常のジェネリックコレクションを使用するだけで構いません。
- 1. 継承&データベース設計
- 2. REVOKE_ACCESS:継承されたACEを '取り消し'する方法
- 3. 継承されたメソッドを模擬する方法
- 4. 継承されたwinformコントロールにイベントハンドラを追加する方法?
- 5. C#で継承されたクラスプロパティをオーバーライドする方法は?
- 6. フラットファイル変換のデータモデルを設計する...デリゲートまたは継承?
- 7. MVC3剃刀モデルのバインダーと継承されたコレクション
- 8. 継承されたオブジェクトのコレクションをメソッドに渡す方法基底オブジェクトのICollectionを受け入れる
- 9. winformsデザイナーで継承されたコントロールにアクセスする方法
- 10. チェス片階層設計:タイプフィールド対継承
- 11. 多重継承の設計実装
- 12. C#で継承された配列を埋める方法は?
- 13. 継承されたメンバーをハイライトする
- 14. オブジェクトの継承とコレクション
- 15. 継承された属性
- 16. GWT継承されたモジュール
- 17. 継承されたテキストデコレーションスタイル
- 18. 継承されたメンバを非表示に継承
- 19. 基底クラスを設計する際の継承ポリシー
- 20. 私のカスタムコントロールのクラス継承を設計する
- 21. 継承された静的オブジェクトの作成方法
- 22. 継承されたプロパティの型を継承型に変更する
- 23. Xcode:ターゲット設定をプロジェクトから継承する方法
- 24. Web.configがIIS構成設定を継承する方法は?
- 25. 継承されたクラスを単純化する有効な方法ですか?
- 26. Javaで多重継承を持たないクラス階層を設計する
- 27. Objective-Cでの継承/設計に関するアドバイス
- 28. 継承されたdjangoモデルインスタンスをクローン化
- 29. 継承に使用された汎用パラメータを反映する方法
- 30. JavaScriptサブクラス - パラメータで定義された親値を継承する方法?
コレクションにアイテムを追加するためにメソッドが使用されないのはなぜですか?他にどのようにアイテムを入れますか? –
ResultInfoは抽象基本クラスですか? – foson