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