ジェネリックとその適切な宣言/使用に関してまだ無知なまま、問題に近づいています。私は前提を理解していますが、ジェネリックのインアンドアウトのいくつかはまだ私を逃しています。
次のコードが与えられた場合 (はコンパイルされず、 code-smell が含まれます):
public interface IUIConcern<out T> where T : IUIConcernExtension
{
string Name { get; }
Func<T> Extend();
}
public class UIConcern
{
public static void Register<T>(string concernName, IUIConcern<T> uiConcern) where T : IUIConcernExtension
{
Concerns.Add(uiConcern);
}
public static List<IUIConcern<T>> Concerns{
get {
// Logic...
}
set {
// Logic...
}
}
}
... いくつかの質問を聞きたいんです:
- 宣言で
public static void Register<T>(string concernName, IUIConcern<T> uiConcern) where T : IUIConcernExtension
すでに制約しているのに、なぜこの部分を制約で指定する必要があるのですかT
public interface IUIConcern<out T> where T : IUIConcernExtension
- から派生することを知る以外
List<>
に、自分のを保持するプロパティをどのように持つことができますか?IUIConcern<T>
T
IUIConcernExtension
繰り返しますが、これはコンパイルされず、正しくないことに気付きました。多くの異なるタイプのIUIConcern<>
要素を持つ可能性のある一般的なアイテムのリストを保持する方法を確認するだけです。
ありがとうございました!