最近我开始学习泛型。我在存储对泛型类实例的引用时遇到了麻烦。如您所见,我的类 ListHandler 可以存储对特定类型的 BaseClass 的引用。我很想自己注册 BaseClass 实例,这就是为什么我想通过添加“where”来保证它们将使用 BaseParamClass。无论如何 - 它不编译。'This',即使在类中使用'where'关键字也不知道 T 实际上是 BaseClassParam。我不知道这里出了什么问题,我在任何地方都找不到答案。我将不胜感激提示/指南/解决方案。
public class ListHandler
{
private List<BaseClass<BaseParamClass>> list;
public ListHandler()
{
list = new List<BaseClass<BaseParamClass>>();
}
public void Register(BaseClass<BaseParamClass> param)
{
list.Add(param);
}
}
public class BaseClass<T> where T : BaseParamClass
{
private ListHandler listHandler;
public T Param { get; private set; }
public BaseClass(ListHandler listHandler)
{
this.listHandler = listHandler;
listHandler.Register(this); //throws error
}
}
最佳答案
你为什么不做 ListHandler
也通用?
public class ListHandler<T>
{
private List<BaseClass<T>> list;
public ListHandler()
{
list = new List<BaseClass<T>>();
}
public void Register(BaseClass<T> param)
{
list.Add(param);
}
}
public class BaseClass<T>
{
private ListHandler<T> listHandler;
public T Param { get; private set; }
public BaseClass(ListHandler<T> listHandler)
{
this.listHandler = listHandler;
listHandler.Register(this);
}
}
此外,我觉得 BaseClass<T>
很奇怪包含对引用了 BaseClass<T>
的类的引用本身。
关于C# 将当前泛型类实例传递给其他类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47521461/