gpt4 book ai didi

c# - C#中多态性中的复制构造函数

转载 作者:行者123 更新时间:2023-11-30 17:48:20 26 4
gpt4 key购买 nike

请先看一下这段简单的代码;

这是我的基类:

public class BaseClass
{
public BaseClass()
{
}

public BaseClass(BaseClass b)
{
}

public virtual string GetMSG()
{
return "Base";
}
}

这是派生的:

public class DrivenClass : BaseClass
{
public string MSG { get; set; }

public DrivenClass(string msg)
{
MSG = msg;
}

public DrivenClass(DrivenClass d)
{
MSG = d.MSG;
}

public override string GetMSG()
{
return MSG;
}
}

这是测试:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

public BaseClass B { get; set; }
public DrivenClass D { get; set; }

private void button1_Click(object sender, EventArgs e)
{
D = new DrivenClass("Driven");
B = new BaseClass(D);
MessageBox.Show("B:" + B.GetMSG() + "\nD:" + D.GetMSG());
}
}

现在我的问题是我应该怎么做才能使 B = new BaseClass(D);B = new DrivenClass(D); 一样工作?

我在多态性中使用它,我喜欢使用一个复制构造函数而不是不同的驱动复制构造函数。

我想要这样的输出:

Driven
Driven

但是现在是这样的:

Base
Driven

最佳答案

您可以使用重写的虚拟 Copy 方法而不是复制构造函数。

public class BaseClass
{
public BaseClass()
{
}

public virtual BaseClass ShallowCopy()
{
return new BaseClass();
}

public virtual string GetMSG()
{
return "Base";
}
}

public class DrivenClass : BaseClass
{
public string MSG { get; set; }

public DrivenClass(string msg)
{
MSG = msg;
}

public override BaseClass ShallowCopy() {
return new DrivenClass(this.MSG);
}

public override string GetMSG()
{
return MSG;
}
}

然后这样调用它:

D = new DrivenClass("Driven");
B = D.ShallowCopy();

这会起作用,因为调用虚方法总是会调用子类中实际重写的实现,即使是从基类接口(interface)调用时也是如此。

关于c# - C#中多态性中的复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23216813/

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