gpt4 book ai didi

c# - 为什么这个方法调用不调用派生类?

转载 作者:太空宇宙 更新时间:2023-11-03 23:44:01 25 4
gpt4 key购买 nike

我有一个接口(interface)IDeepCloneable,我用它来实现通用深度复制。我还有一个基类和一个派生类,每个类都实现了 IDeepCloneable。我遇到了派生类的问题。

代码如下:

public class Program
{
public static void Main()
{
var a = new BaseClass();
var ac = a.DeepClone();

var b = (BaseClass)(new DerivedClass());
var bc = b.DeepClone();
}
}

public interface IDeepCloneable<T>
{
T DeepClone();
}

public class BaseClass : IDeepCloneable<BaseClass>
{
public string Value { get; set; }

public BaseClass(){}
public BaseClass(BaseClass copy)
{
Value = copy.Value;
}

public BaseClass DeepClone()
{
Console.WriteLine("BLAH1");
return new BaseClass(this);
}
}

public class DerivedClass : BaseClass, IDeepCloneable<DerivedClass>
{
public string SomeOtherValue { get; set; }

public DerivedClass(){}
public DerivedClass(DerivedClass copy)
: base(copy)
{
SomeOtherValue = copy.SomeOtherValue;
}

public new DerivedClass DeepClone()
{
Console.WriteLine("BLAH2");
return new DerivedClass(this);
}
}

这个输出:

BLAH1
BLAH1

我明白为什么它输出 BLAH1 两次,我只是不确定如何修复它..

最佳答案

您的派生类需要覆盖 DeepClone() 方法,并且您的基类中的DeepClone 方法需要是虚拟

现在,派生类中的 DeepClone 方法与基类无关(除了具有相同的名称)。参见 Interface Implementation Inheritance在 C# 标准中。

也就是说,您似乎正在尝试进行深拷贝。您是否考虑过使用 BinaryFormatter序列化和反序列化您的数据?

关于c# - 为什么这个方法调用不调用派生类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28077084/

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