C# 将当前泛型类实例传递给其他类

标签 c# generics collections

最近我开始学习泛型。我在存储对泛型类实例的引用时遇到了麻烦。如您所见,我的类 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/

相关文章:

c# - 在windows phone 8中取消语音合成

c# - protobuf-net 中通用集合的序列化

swift - 是否有一些解决方法可以在不知道定义的元素类型是什么的情况下转换为通用基类?

java - 泛型类型的非泛型对象

c# - 在c#中将代码列表集合写入字符串

c# - 使用从kernel32.dll导入的SetThreadAffinityMask函数

c# - BannedSymbols.txt 可以在解决方案范围内而不是在每个项目上添加吗?

c# - Squirrel Powershell 文件未创建 Setup.exe

c# - 用 IEnumerable<> 源填充 Dictionary<>

c# - 设置 SortedDictionary 的第 i 个值