私は、このユースケースの可能な解決策または代替案が何であるかを知りたいという状況に遭遇しました。
ジェネリックパラメーターを受け入れるメソッドシグネチャを持つクラスがあります。そこで、メソッドシグネチャ自体を汎用にしました。
/// <summary>
/// Input Widget.
/// </summary>
public sealed class InputWidget {
/// <summary>
/// Widget's Control.
/// </summary>
public IList<dynamic> Controls { get; private set; }
public InputWidget AddControl<TC>(InputControl<TC> control) where TC : BaseControl<TC> {
this.Controls.Add(control);
return this;
}
}
そのパラメータをクラスプロパティに割り当てたい場合は、何らかの理由で、プロパティのタイプがobject
、または.NET 4で始まらない限り、それを行うことはできませんdynamic
。
dynamic
overを使用すると、リストから各要素を取得してさらに使用するときに、ジェネリック型にobject
キャストバックする手間を省くことができます。object
しかし、コンパイル型の安全性であるIntellisenseがないため、あまり満足しdynamic
ていません。注意しないと、実行時に致命的となる可能性があります。
では、なぜ私は自分のクラスがジェネリックであると単純に宣言しないのですか?InputControl
特定のタイプのを受け入れるようにメソッドを制限したくないからです。さらに、同じアプローチを必要とする他のメソッドを定義しましたが、省略しました。N個のジェネリック型を使用してクラスを定義するのが退屈な場合。この場合、Nはメソッドの数です。
では、このようなシナリオを処理するための最良のアプローチは何ですか?私は何かが足りないのですか?私は間違って考えていますか?さらに悪いことに、私のデザインは完全に間違っていて、初心者向けの本をもう一度読み始める必要がありますか?