C# 如何从包含更多方法定义的每个接口实现两个方法?

C# 如何从包含更多方法定义的每个接口实现两个方法?,c#,oop,C#,Oop,这里如何在类中实现m1和m3?假设您有一个从两个接口继承的类-在这种情况下,您还需要在m1和m3旁边实现m2和m4 您不能只是从接口中选择一些方法作为类的一部分,它们都必须实现。我会更改接口的体系结构,或者如果您无法访问此代码,您可以使用NotImplementedException实现它们您不能手工选择要实现的成员,您必须实现每个接口成员。如果需要对要实现的接口成员进行细粒度控制,则应应用和接口继承来根据需要对其进行自定义,例如: interface Ia { void m1();

这里如何在类中实现m1和m3?

假设您有一个从两个接口继承的类-在这种情况下,您还需要在m1和m3旁边实现m2和m4


您不能只是从接口中选择一些方法作为类的一部分,它们都必须实现。我会更改接口的体系结构,或者如果您无法访问此代码,您可以使用NotImplementedException实现它们

您不能手工选择要实现的成员,您必须实现每个接口成员。如果需要对要实现的接口成员进行细粒度控制,则应应用和接口继承来根据需要对其进行自定义,例如:

interface Ia
{
    void m1();
    void m2();
}

interface Ib
{
    void m3();
    void m4();
}


public class Ca : Ia , Ib
{
    public void m1() { }
    public void m2() { throw new NotImplementedException();  }
    public void m3() { }
    public void m4() { throw new NotImplementedException();  }
}

通过这种方式,您可以完全实现您想要的,并维护接口Ia和Ib的结构。请记住,这是一个示例,盲目应用分离和继承很快就会成为软件设计反模式。它的使用必须是合理的,并且要小心计划。

您必须全部实施。如果我说我是Ia和Ib,那么我必须能够完成这四项任务,否则我就是在撒谎——这是可以理解的,编译器会抱怨的。此外,如果您使用有意义的接口和方法名称,这些类型的问题更容易讨论。您尝试了什么,以什么方式失败了?您无法选择要实现的接口成员。实现类型必须为接口的所有成员提供一个实现,即使该类型是抽象的,它至少必须提供一个抽象成员。接口类似于契约,如果代码可以选择要实现的契约的哪些部分,那么它将不再是有效的契约。如果只使用一个,则应将它们拆分为多个接口。您可以同时实现这两种方法并抛出NotSupportedException,但这是一种糟糕的编程实践,因为它违背了可靠的原则。接口是一种契约,您必须实现接口中的所有方法。接口是实现多态性的一种方式。更多信息:正如我在评论中提到的,你可以,但你不应该这样做。请参阅@NibblyPig right,这不是好的做法,应该被视为最后的出路。无论如何,我会使用NotImplementedException而不是NotSupportedException。在这种情况下,您可能会选择在自己类型的属性或方法中抛出NotImplementedException异常,而该成员仍在开发中,并且只会在以后的生产代码中实现。换句话说,NotImplementedException异常应该与仍在开发中的异常同义。如果无法实现接口成员或对抽象基类方法的重写,则引发NotSupportedException异常。从…起
interface Ia
{
    void m1();
    void m2();
}

interface Ib
{
    void m3();
    void m4();
}


public class Ca : Ia , Ib
{
    public void m1() { }
    public void m2() { throw new NotImplementedException();  }
    public void m3() { }
    public void m4() { throw new NotImplementedException();  }
}
interface Isa
{
    void m1();
}

interface Isb
{
    void m3();
}

interface Ia : Isa
{
    void m2();
}

interface Ib : Isb
{
    void m4();
}

class C1 : Isa, Isb
{
   public void m1() { }
   public void m3() { }
}