我正在解决一个问题,同时仍然对泛型及其正确的声明/使用有一些无知。我明白了前提,但我仍然无法理解泛型的一些细节。
给定以下代码(不编译并包含代码气味):
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<>元素的通用项目列表。
谢谢!