gpt4 book ai didi

C# 在基类中创建派生类的实例

转载 作者:太空狗 更新时间:2023-10-29 20:06:02 27 4
gpt4 key购买 nike

我有以下设置:

public abstract class A
{
public void f()
{
//Want to make an instance of B or C here
//A bOrC = new ?
}
public abstract void f2();
}
public class B : A { public override void f2(){} }
public class C : A { public override void f2(){} }

这可能吗?如果是怎么办?

编辑 bOrC 需要是调用f() 的特定派生类的类型

最佳答案

我可以想到两种方法来解决这个问题。一个使用泛型,另一个只需要一个抽象方法。首先是简单的。

public abstract class A
{
public void f()
{
A bOrC = newInstance();
}
public abstract void f2();
protected abstract A newInstance();
}
public class B : A {
public override void f2(){}
public override A newInstance(){
return new B();
}
}
public class C : A {
public override void f2(){}
public override A newInstance(){
return new C();
}
}

现在有了泛型

public abstract class A<T> where T : A, new()
{
public void f()
{
A bOrC = new T();
}
public abstract void f2();
}
public class B : A<B> {
public override void f2(){}
}
public class C : A<C> {
public override void f2(){}
}

关于C# 在基类中创建派生类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5135250/

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