2015-12-02 64 views
-2

我试图了解接口,我在这个页面看到一个例子,但它本身并不是一个接口的例子。正确的方式来实现一个接口

我了解什么接口:

  • 是类实现(方法,属性,事件等)与接口之间的合同。

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

所以这是一个示范只和我的尝试: (在不同的类)

class Father 
{ 
} 

class Mother : IMother 
{ 
    public string Hello() 
    { 
     return "Im the mother"; 
    } 
} 

public interface IMother 
{ 
    string Hello(); 
} 

class Son : Father,IMother 
{ 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Son son1 = new Son(); 
     son1.Hello() // --> Hello does not exist. 
    } 
} 

我到底做错了什么?

谢谢。

+1

'子'没有实现'IMother.Hello' –

+0

代码不能编译,你必须在子类中实现Hello()。你怎么试过这个? – Alex

+1

一般来说,一个儿子不是父亲和母亲。这使得这个例子令人困惑 –

回答

2

我做错了什么?

您不在Son的任何地方实施Hello的继承链。如果下面的任何一个被改变,你会正确地实现接口:从Mother

  • Son继承,而不是从Mother
  • FatherFather
  • Father继承实现Hello
  • Son实现Hello

接口可以不可以可用于多个继承。继承仅适用于执行 - 您可以执行多个接口,但不能继承多个实现。

如果你有多个类,你想重新使用的实现,然后组成通常是最好的方式来做到这一点。 Son类将引用FatherMother对象,并通过属性公开它们或创建传递属性和方法以获取底层实现。

+0

我现在明白了,如果不是有“父亲”,“母亲”,我有父子双方继承祖父和父亲的祖父,父亲和儿子有一种子可以使用的方法太。所以在这种情况下我使用一个接口,我看到的是继承的“金字塔”倒退。谢谢。 – Nickso

-1

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

要解决你的代码,你必须改变这条线走接口变量,而不是类:

IMother son1 = new Son(); 
son1.Hello() // --> Now exists. 
直到你实现子类

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

如果你不想实现儿子的接口方法里面的接口方法

您的代码将不会反正工作,你要访问的方法在母级,那么你必须继承Mother instea Son班的父亲班。

+0

你是什么意思,“我们使用接口来处理抽象而不是具体的实现”? 你能举个例子吗? – Nickso

+0

@DStanley我提到过,我展示了如何实现Hello方法。 –

+0

@Nickso例子是IMother myClassVar = new Son();那么在第二行你可以说myClassVar = new Mother();你可以切换实现使用类实现相同的接口 –

相关问题