【发布时间】:2015-12-23 16:41:30
【问题描述】:
我很惊讶 C# 使用接口的可选方法参数的值,而不是来自实现此接口的类。例如:
using System;
public class Program
{
private static IMyInterface instance;
public static void Main()
{
instance = new MyClass();
instance.PrintOpt();
((MyClass)instance).PrintOpt();
}
}
public interface IMyInterface
{
void PrintOpt(bool opt = false);
}
public class MyClass : IMyInterface
{
public void PrintOpt(bool opt = true)
{
Console.WriteLine($"Value of optional argument is {opt}");
}
}
产生输出:
可选参数的值为 False
可选参数的值为真
我的问题是:是否可以在没有默认值或“可覆盖”的接口中定义可选参数,因此对保存在接口类型变量中的实例的方法调用使用在实现此接口的类中定义的可选值?
【问题讨论】:
-
为何如此令人惊讶?您将实例变量键入为 IMyInterface - 为什么您希望它使用接口定义以外的任何内容?
-
来自 Eric Lippert 的 this SO answer 中很好的相关解释
-
我很惊讶默认值不是方法签名的一部分。换句话说......由于接口指定了一个默认为 FALSE 的 bool 参数的方法,我很惊讶该类不需要实现默认为 FALSE 的 bool 参数的方法。