我刚刚开始掌握泛型,并且(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/