C# 实现接口的正确方法

C# 实现接口的正确方法,c#,interface,C#,Interface,我试图理解接口,我在这页看到了一个例子,但它本身并不是一个接口的例子 我对接口的理解: 是实现(方法、属性、事件等)的类与接口之间的约定 因为在C#和.NET中,你不能多重继承,你可以使用接口,在那里你可以使用你不能继承的类的方法、属性等 所以这只是一个演示我尝试的: (不同班级) 我做错了什么 谢谢 我做错了什么 您没有在Son的继承链中的任何位置实现Hello。如果更改了以下任何一项,您将正确实现该接口: 儿子继承自母亲而非父亲 父亲继承自母亲 Father实现Hello Son实现H

我试图理解接口,我在这页看到了一个例子,但它本身并不是一个接口的例子

我对接口的理解:

  • 是实现(方法、属性、事件等)的类与接口之间的约定

  • 因为在C#和.NET中,你不能多重继承,你可以使用接口,在那里你可以使用你不能继承的类的方法、属性等

所以这只是一个演示我尝试的: (不同班级)

我做错了什么

谢谢

我做错了什么

您没有在
Son
的继承链中的任何位置实现
Hello
。如果更改了以下任何一项,您将正确实现该接口:

  • 儿子
    继承自母亲而非父亲
  • 父亲
    继承自母亲
  • Father
    实现
    Hello
  • Son
    实现
    Hello
接口不能用于多重继承。继承仅对实现有效-您可以实现多个接口,但不能继承多个实现


如果有多个类要重用其实现,那么组合通常是最好的方法。
Son
类将引用
父对象
母对象
对象,并通过属性公开它们,或创建传递属性和方法来访问底层实现。

我们使用接口来处理抽象而不是具体实现,为什么?简单的回答它使测试很容易用假类替换我们的类,并且它创建了模块化应用程序(OOP)

要修复代码,必须更改此行以转到接口变量而不是类:

 IMother son1 = new Son();
 son1.Hello() // --> Now exists.
除非在子类中实现接口方法,否则代码无论如何都不会工作

class Son : Father, IMother
    {
        public string Hello()
        {
            throw new NotImplementedException();
        }
    }

如果您不想在子类中实现接口方法,并且希望在母类中访问该方法,那么您必须在子类中继承父类而不是母类。

Son
不实现
IMother。Hello
代码没有按原样编译,您必须在子类中实现Hello()。你怎么能这样做呢?一般来说,儿子不是父亲和母亲。这使得这个例子令人困惑,这些都是令人讨厌的家庭关系。这只是一个例子,除了我现在不担心的设计之外。谢谢你。我现在明白了,如果儿子和父亲从祖父和父亲那里继承的“祖父”、“父亲”和“儿子”也有儿子可以使用的方法,而不是“父亲”、“母亲”,这将更有意义。因此,在这种情况下,我使用了一个接口,我看到了继承的“金字塔”。谢谢。你说“我们使用接口来处理抽象而不是具体的实现”是什么意思?您能给我举个例子吗?@DStanley我提到了这一点,并演示了如何实现Hello方法。@Nickso的例子是IMother myClassVar=new-Son();然后在第二行,您可以说myClassVar=new Mother();您可以使用for类来切换实现,实现相同的interfaceAh,这非常酷,所以我的类实例可以更改为另一个。我是否需要一个接口来执行此操作?不,OP“不必更改此行以转到接口变量而不是类”-除非
IMother
Son
中显式实现。
class Son : Father, IMother
    {
        public string Hello()
        {
            throw new NotImplementedException();
        }
    }