相关疑难解决方法(0)

为什么接口上定义的C#4可选参数在实现类时没有强制执行?

我注意到,如果在接口上将参数指定为可选参数,则使用C#4中的可选参数,您不必在任何实现类上使该参数可选:

public interface MyInterface
{
    void TestMethod(bool flag = false);
}

public class MyClass : MyInterface
{
    public void TestMethod(bool flag)
    {
        Console.WriteLine(flag);
    }
}
Run Code Online (Sandbox Code Playgroud)

因此:

var obj = new MyClass();        
obj.TestMethod(); // compiler error

var obj2 = new MyClass() as MyInterface;
obj2.TestMethod(); // prints false
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么可选参数设计为这样工作?

一方面,我认为覆盖接口上指定的任何默认值的能力是有用的,但老实说,我不确定您是否应该能够在接口上指定默认值,因为这应该是一个实现决策.

另一方面,这种断开意味着您不能总是交替使用具体类和接口.当然,如果在实现上指定了默认值,那么这不是问题,但是如果你将具体类作为接口公开(使用一些IOC框架来注入具体的类),那么真的没有具有默认值的点,因为调用者无论如何都必须始终提供它.

.net c# interface optional-parameters c#-4.0

347
推荐指数
4
解决办法
9万
查看次数

接口的可选参数

使用c#4.0 - 构建一个接口和一个实现接口的类.我想在界面中声明一个可选参数,并让它反映在类中.所以,我有以下内容:

 public interface IFoo
 {
      void Bar(int i, int j=0);
 }

 public class Foo
 {
      void Bar(int i, int j=0) { // do stuff }
 }
Run Code Online (Sandbox Code Playgroud)

编译,但看起来不正确.接口需要具有可选参数,否则它在接口方法签名中无法正确反映.

我应该跳过可选参数并使用可空类型吗?或者这是否按预期工作,没有副作用或后果?

c# interface optional-parameters c#-4.0

66
推荐指数
3
解决办法
5万
查看次数

标签 统计

c# ×2

c#-4.0 ×2

interface ×2

optional-parameters ×2

.net ×1