【问题标题】:Interface V/s Abstract in Method calling c#方法调用c#中的接口与抽象
【发布时间】:2014-09-20 05:47:21
【问题描述】:

在下面的代码中,如果管理器类不继承抽象类“客户”,并且如果我在“显示”方法中使用 override 关键字,那么它会给出错误“Manager.Display()':找不到合适的方法来覆盖”。但是另一方面,如果“manager”类同时继承了接口和抽象类,那么带有override关键字的“display”方法不会给出任何错误。它是怎么来的,它调用了接口或抽象的哪个方法。为什么它没有给出错误。请看下面的代码..

public interface IEmployee
{
    void Display();
}
public abstract class Customer
{
    public abstract void Display();
}
public class Manager : Customer,IEmployee
{
    public override void Display()
    {
        Console.WriteLine("dsds");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Manager c = new Manager();
        c.Display();
        Console.ReadLine();
    }
}

【问题讨论】:

  • 如果不是从基类继承,则不能使用override - 你会覆盖什么?而且你不能覆盖接口方法——那些只是必须声明的契约方法。

标签: c#


【解决方案1】:

如果您想扩展或修改基类的实现,您应该使用override。你不能重写接口方法——那些只是必须声明的契约方法。

来自 MSDN:

需要覆盖修饰符来扩展或修改摘要或 继承的方法、属性、索引器的虚拟实现,或 事件。

【讨论】:

    猜你喜欢
    • 2013-01-19
    • 2013-07-21
    • 2017-07-07
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多