c#中的行为抽象类和接口是什么?

时间:2013-12-14 07:19:27

标签: c# asp.net .net interface abstract-class

我的代码如下

public interface NomiInterface
{
     void method();
}
public abstract class Nomi1
{
     public void method()
     {
     }
}
public class childe : Nomi1, NomiInterface 
{ 
}

现在编译成功了吗?为什么不需要覆盖childe类中的接口方法?

1 个答案:

答案 0 :(得分:3)

您需要explicit implementation界面。抽象类方法method()实现满足了实现抽象接口方法的需要。因此,在类childe中定义接口的方法,但显式实现需要调用接口的方法而不是类。

public interface NomiInterface
{
     void method();
}
public abstract class Nomi1
{
     public void method()
     {
          Console.WriteLine("abstract class method");
     }
}
public class childe : Nomi1, NomiInterface 
{ 
     void NomiInterface.method()
     {
          Console.WriteLine("interface method"); 
     }
}

您可以测试如何调用childe中的抽象类和接口实现方法

childe c = new childe();
NomiInterface ni = new childe();
ni.method();
c.method();

输出

interface method
abstract class method

另一方面,如果你没有进行显式的接口实现,那么childe类中给出的实现将不会在childe或接口对象上调用。

public interface NomiInterface
{
    void method();
}
public abstract class Nomi1
{
    public void method()
    {
        Console.WriteLine("abstract class method");
    }
}
public class childe : Nomi1, NomiInterface
{
    void method() { Console.WriteLine("interface method"); }
}

像以前一样创建类和接口的对象。

childe c = new childe();
NomiInterface ni = new childe();
ni.method();
c.method();

您将获得的输出

abstract class method
abstract class method

作为附加说明,您将负责类/方法名称的命名约定。您可以找到有关命名约定here的更多信息。