首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么在接口上定义的C# 4可选参数在实现类时不强制执行?

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

Stack Overflow用户
提问于 2011-02-07 22:59:10
回答 7查看 116.8K关注 0票数 395

我注意到,在C# 4中使用可选参数时,如果您在接口上指定了一个可选参数,则t必须使该参数在任何实现类上都是可选的:

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

public class MyClass : MyInterface
{
    public void TestMethod(bool flag)
    {
        Console.WriteLine(flag);
    }
}

因此:

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

var obj2 = new MyClass() as MyInterface;
obj2.TestMethod(); // prints false

有人知道为什么可选参数被设计成这样工作吗?

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

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

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4922714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档