为什么接口不像类一样?

时间:2013-04-19 10:40:14

标签: c# oop c#-4.0 interface c#-3.0

我对接口有几个问题。

  1. 为什么我们不能将virtual关键字用于Interfaces成员

  2. 为什么我们不能在接口

  3. 的派生类中使用override关键字
  4. 假设

    interface Iface
    {
        void Func();
    }
    class Program : Iface
    {
        static void Main(string[] args)
        {
    
        }
        public void Func()
        {
            Console.WriteLine("In func");
        }
    }
    

    为什么我需要在接口的派生类中使用public成员函数,即在Func()定义中?如果我不使用public关键字,则会导致编译时错误

  5. 我们可以在界面中使用静态成员吗​​?

3 个答案:

答案 0 :(得分:5)

  1. 标记方法 virtual 为继承类提供了覆盖相应方法的选项。但是当从接口继承时,实现不是可选的,而是强制的。根据定义,每个接口方法都是 abstract

  2. 覆盖方法,实施它们。接口方法没有自己的实现,覆盖没有任何内容。这没有任何意义。

  3. Why a C# interface method implemented in a class must be public

  4. No we can't use static methods on an interface

答案 1 :(得分:2)

  1. 接口不需要。实施可以是virtual
  2. 实现不需要 - 没有什么可以覆盖。
  3. 您必须实例化Program才能调用Func。此外,没有静态接口的概念。

答案 2 :(得分:-1)

接口不像类一样,因为我们不能创建接口的对象,如果我们可以使接口的对象实现多重继承,那么我们就可以面对在多重继承类的情况下发生的钻石问题。