关于ASP.NET:C中的行为抽象类和接口是什么?

what is the behaviour abstract class and interface in c#?

本问题已经有最佳答案,请猛点这里访问。

我有下面的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
public interface NomiInterface
{
     void method();
}
public abstract class Nomi1
{
     public void method()
     {
     }
}
public class childe : Nomi1, NomiInterface
{
}

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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中的抽象类方法和接口实现

1
2
3
4
childe c = new childe();
NomiInterface ni = new childe();
ni.method();
c.method();

输出是

1
2
interface method
abstract class method

另一方面,如果不执行显式接口实现,那么childe类中给出的实现将不会被调用到childe或接口对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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"); }
}

像前面那样创建类和接口的对象。

1
2
3
4
childe c = new childe();
NomiInterface ni = new childe();
ni.method();
c.method();

你将得到的输出

1
2
abstract class method
abstract class method

作为附加说明,您将注意类/方法名称的命名约定。您可以在这里找到有关命名约定的更多信息。