我有一个抽象基类
class AbstractClass
{
Col<AbstractClass> parent
public AbstractClass()
{
//do stuff
}
}
我有两种实现方法
class A : AbstractClass
{
Col<A> parent
public A(Col<A> parent)
:base(parent)
{
this.parent = parent;
}
}
class B : AbstractClass
{
Col<B> parent
public B(Col<B> parent)
:base(parent)
{
this.parent = parent;
}
}
我有一个集合
class Col<T> : IList<T> where T : AbstractClass
这段代码将被用于另一个类中,作为Col<A>
和Col<B>
,我们称之为C
。
class C
{
List<A> a = new List<A>()
List<B> b = new List<B>()
}
这一切都可以实现,但是我希望类型A
和B
能够知道它们的父集合。我认为在AbstractClass
、A和B中使用以下构造函数应该没问题,但似乎泛型约束只能用于类而不是方法。基本上,我想要以下构造函数:
public AbstractClass(Col<T> where T : AbstractClass)
public A(Col<A>)
public B(Col<B>)
A、B的实例需要知道它们所在的集合,但我无法从派生类中调用基础构造函数,因为它们是不同类型。
求助!
new
关键字在基类中隐藏Col<AbstractClass>
属性,或者只是保持原样并进行强制转换。但是你无法覆盖它,这是你必须接受的事实。 - Noldorinpublic void Foo<T>(T bar) where T : AbstractClass { ... }
- Noldorin