C# 如何不继承接口中的某些函数?

C# 如何不继承接口中的某些函数?,c#,C#,我有一个包含10个方法的接口,它继承到类中,比如class1。我的要求是我不想将2-method继承到class1中。因此,在c#.net中,如何可能将接口拆分为2,并让类只实现其中一个: public interface Ifc1 { void Method1(); } public interface Ifc2 { void Method2(); } class Cls1 : Ifc1 { // now you need to implement Method1 on

我有一个包含10个方法的接口,它继承到类中,比如class1。我的要求是我不想将2-method继承到class1中。因此,在c#.net中,如何可能将接口拆分为2,并让类只实现其中一个:

public interface Ifc1 {
    void Method1();
}
public interface Ifc2 {
    void Method2();
}
class Cls1 : Ifc1 {
    // now you need to implement Method1 only
}
或者,您可以在
方法2中抛出
NotImplementedException

class Cls1 : Ifc1 {
    public void Method2() {
        throw new NotImplementedException();
    }
}
如果可能的话,我会选择第一种

如果抛出异常,则只有在调用该方法时才会发现该方法不受支持。您必须捕获异常,您将要编写的代码必须处理该异常,并且不会如此干净


相反,如果您拆分接口,您的类将没有您不想实现的方法。

创建一个混合匹配系统

您的类应该实现整个接口,因为在您的问题的上下文中实际上没有其他选择。其他答案可以为您提供关于修改接口设计者建立的可能不正确语义的指导

您的类实现了接口,但您的类本身依赖于实际执行工作的未来实现者

类应该派生自包含抽象函数的类。这些抽象函数将在接口的类实现中被“调用”。但是,由于您的类包含未解析的抽象内容,因此它将无法直接实例化

直到,另一个类继承自您的类,并具体实现抽象函数,或者在短期内的另一种情况(很可能)中抛出不受支持的异常


通过这种方式,您可以在不违反任何原则的情况下实现您所能实现的,但是可以将基本冲突传递给一个待定的类。这样,你向前迈出了一步,但又避开了冲突。未来的实施者可以相信你的前进步伐是一个正确的基础性动作,但必须解决并扭转你的横向动作,以形成一个比喻。

这不是,至少不是你期望的方式。如果一个类实现了一个接口,那么它必须实现整个接口。(这就是它成为接口的原因……它是类提供的功能契约。)如果您想选择要实现的部分,那么您需要多个较小的接口。试图将一个接口应用于一个实际上未被该接口描述的类违反了Liskov替换原则。您可以将类1抽象化或继承,但在内部抛出NotSupportedException。@Diryboy:仍然违反了Liskov替换原则。对象应准确描述其公开的功能。接口和抽象类不仅仅是可能需要或不需要的功能的倾销地。更改接口以使其符合您的要求…?关于违反LS,开发人员永远不会,对吗?不过我同意,如果您可以避免抛出异常或违反LS,那就最好了。我认为保罗的回答是一个好主意,如果可能的话。我认为,尽管我们真的需要更好地理解苏伯兰苏正在试图做什么;没有足够的上下文来提供结论性的答案。应该拆分接口。不要抛出异常,您实现接口的事实表明您支持接口定义的所有行为。