gpt4 book ai didi

c# - 从基类创建派生类的实例

转载 作者:行者123 更新时间:2023-12-04 21:57:13 26 4
gpt4 key购买 nike

我有我的抽象基类 :

public abstract class A : ICloneable {

public int Min { get; protected set; }
public int Max { get; protected set; }

public A(int low, int high)
{
this.Min = low;
this.Max = high;
}

//...

public object Clone()
{
return new this(this.Min, this.Max); //<-- ??
}
}

由我的类(class)扩展 :
public class B : A
{
public B(int low, int high) : base(low, high) { }

//...
}

是抽象的,它不能被实例化,但派生类可以。
是否有可能,来自类(class) , 创建类 的新实例乙 ?

假设类(class) 有许多派生类,它如何知道要实例化哪一个?

好吧,我想实例化我当前的相同类(或类型) 是。

也就是说,如果我调用 Clone来自类的方法 ,我想实例化一个新的 .
如果我调用 Clone来自类的方法 C ,我想实例化一个新的 C .

我的方法是写一些类似的东西:
return new this(this.Min, this.Max);

但这似乎不起作用或编译。

是否可以在 中完成此操作? C# ?

如果不是,是否有解释以便我理解?

最佳答案

是的,这可以通过基类上的抽象工厂方法实现

public abstract class A
{
public int Min { get; protected set; }
public int Max { get; protected set; }

public A(int low, int high)
{
this.Min = low;
this.Max = high;
}
protected abstract A CreateInstance(int low, int high);

public object Clone()
{
return this.CreateInstance(this.Min,this.Max);
}
}

public class B:A
{
public B(int low, int high)
: base(low,high)
{
}
protected override A CreateInstance(int low, int high)
{
return new B(low,high);
}
}

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

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