gpt4 book ai didi

c# - 泛型、抽象类、构造函数

转载 作者:行者123 更新时间:2023-11-30 14:43:54 28 4
gpt4 key购买 nike

我有一个抽象基类

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> and Col<B> ,我们称这个类为C .

class C
{
List<A> a = new List<A>()
List<B> b = new List<B>()
}

这一切都可以,除了我想要类型 AB了解他们的父集合。我认为在 AbstractClass 中有以下构造函数, A, B 没问题,但似乎通用约束仅适用于类而不适用于方法。本质上我想要以下构造函数:

public AbstractClass(Col<T> where T : AbstractClass)
public A(Col<A>)
public B(Col<B>)

A、B 的实例需要知道它们在哪个集合中,但我不能从派生类调用基类构造函数,因为它们是不同的类型。

帮助!

最佳答案

我经常使用与 C++ 相关的模式 curiously recurring template pattern当我想做这样的事情时:

abstract class AbstractClass<TDerivedClass>
where TDerivedClass : AbstractClass<TDerivedClass>
{
Col<TDerivedClass> parent;

public AbstractClass(Col<TDerivedClass> parent)
{
// do stuff
this.parent = parent;
}
}

class A : AbstractClass<A>
{
public A(Col<A> parent)
:base(parent) {}
}

class B : AbstractClass<B>
{
public A(Col<B> parent)
:base(parent) {}
}

关于c# - 泛型、抽象类、构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1333774/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com