作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有一个可选默认参数的基类,子类会自动为它提供一个值:
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/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!