c# - 输入保存受约束泛型类实例的变量

标签 c# generics inheritance syntax

我刚刚开始掌握泛型,并且(ab)使用它们来重构我的代码中相当复杂的部分(我只使用 C# 一段时间,但在其他语言方面经验丰富)。

我有一个继承结构,其中我的类扩展了基类。在基类中,我实现了大部分功能。但我希望能够将这些子类与其 sibling 的实例关联起来。

以下是一些相关代码的简化:

class ParentClass<T>
    where T : ParentClass<T>, new()
{

    public static T Create()
    {
        return new T();
    }

    private object joinedItem;

    public void Join<TJoinee>(TJoinee item)
        where TJoinee : ParentClass<TJoinee>, new()
    {
        joinedItem = item;
    }

}

class ChildOne : ParentClass<ChildOne>
{
}

class ChildTwo : ParentClass<ChildTwo>
{
}

使用此代码,我可以执行以下操作:

var a = ChildOne.Create();
a.Join(new ChildTwo());

问题是我需要输入 joinedItem当我真的想将其输入为 ParentClass<Something> 时作为对象。是否可以为 joinedItem 指定更具体的类型?或者我只是严重滥用了语言,应该采取完全不同的方法?

最佳答案

你能从 ParentClass<T> 中提取一个接口(interface)吗?这不依赖于T ?那样joinedItem可以在界面中输入。

这似乎是您可以尝试做的事情(将 ParentClass<T> 实例连接到 ParentClass<U> 实例)。

如果里面什么都没有ParentClass<T>不依赖于 T 的接口(interface),那么在不知道T的情况下就很难找到比对象更有用的接口(interface).

关于c# - 输入保存受约束泛型类实例的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1860662/

相关文章:

c# - 在 C# 中反转 Picturebox 图像

javascript - 将 JSON DateTime 转换为 JavaScript 日期时,它显示为比本地时区早 1 天

针对字符串的 c# 单元测试日期时间

Java 泛型不一致的行为?

c# - .NET 通用方法问题

java - 泛型扩展和 super ?差异

javascript - 如何在 tsc 从 .js 文件生成的类型定义中包含继承的属性?

c# - 为 Visual Studio 导出/导入包

c# - 多线程同步列表<T>

java - 对于只调用 super.method() 的方法,在 junit 中应该检查什么?