gpt4 book ai didi

c# - 继承可选参数基方法的歧义

转载 作者:行者123 更新时间:2023-11-30 12:15:26 25 4
gpt4 key购买 nike

我有一个带有一个可选默认参数的基类,子类会自动为它提供一个值:

public class Merchant
{
public string WriteResults(List<string> moreFields = null)
{

List<string> ListOfObjects = new List<string>() {Name, Address};
if (moreFields != null)
{
ListOfObjects.AddRange(moreFields);
}
return ListOfObjects.ToString() //not real output
}


public class SpecificMerchant : Merchant
{
new public string WriteResults()
{
return ((Merchant)this).WriteResults(new List<string>() {
Address, Phone //class-specific parameters
});
}
}

我在调用 SpecificMerchant.WriteResults 时使用了 new 关键字,因为 parent 和 base 都不能带参数,但编译器说这是不必要的:

The member 'SpecificMerchant.WriteResults()' does not hide an inherited member. The new keyword is not required.

为什么?实际上,我不是在覆盖父方法吗?

最佳答案

不,您没有覆盖它。您正在提供具有不同签名的方法。考虑一下:

new SpecificMerchant().WriteResults(new List<string>());

可能调用 SpecificMerchant 中的方法吗?否 - 您已指定一个参数,而 SpecificMerchant.WriteResults 未指定任何参数。仅这一事实就表明它不可能覆盖 Merchant.WriteResults

您的代码肯定会引起混淆,因为类型层次结构中的重载通常甚至没有可选参数 - 但就 C# 编译器和 CLR 而言,这些是非常不同的方法。 . 碰巧两者都可以验证没有指定参数的调用,但这是另一回事。

关于c# - 继承可选参数基方法的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7474364/

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