我正在接近一個問題,同時仍然對泛型及其正確的聲明/用法有一些無知。我得到了這個前提,但是泛型的一些缺陷仍然不見了。指定泛型類型作爲參數參數而不知道T
考慮下面的代碼(不編譯和包含的代碼異味):
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
- 如何c我有一個財產,持有
List<>
我的IUIConcern<T>
不知道T
除了知道它會從IUIConcernExtension
派生?
同樣,我知道這不會編譯,是不正確的,只是想看看我怎麼能認爲,可能有許多不同類型的IUIConcern<>
元素的通用項目的列表。
謝謝!