代码之家  ›  专栏  ›  技术社区  ›  radbyx Matt

如何通过C中的子类来固有接口方法#

c#
  •  1
  • radbyx Matt  · 技术社区  · 14 年前

    我有:

    我:

    public interface I
    {
        void Something();
    }
    

    答:

    public class A : I
    {
        public void Something()
        {
        }
    }
    

    B:

    public class B : A
    {
    }
    

    为什么B没有像预期的那样强制实现(决定的)某种方法?

    我真的需要在所有的b(a的子类)上都有i吗?

    public class B : A, I
    {
        public void Something()
        {
        }
    }
    
    3 回复  |  直到 14 年前
        1
  •  1
  •   Andy White    14 年前

    B并不强制实现I,因为它已经在A中实现。

    如果您想强制B实现它,您必须使它在A中抽象,或者不在A上实现接口,只在B中实现I。

    另一方面,如果您希望允许b重写a中定义的方法,则应使a中的方法为虚方法,然后使用override关键字重写b中的方法。现在,a中的某个方法不是虚方法,因此如果您尝试在b中重写该方法,则编译器将向您和error发出警告,说明将方法“隐藏”在基类中。

        2
  •  6
  •   Pablo Santa Cruz    14 年前

    因为 B 已经拥有 Something 继承自的方法 A .

    所以 不是 强迫 实施 某物 方法。 另一方面,它可以自由地覆盖 某物 方法,如果需要,提供 某物 方法标记为 virtual 课堂上 :

    public class B : A
    {
        public override void Something()
        {
            // B's something
        } 
    }
    
        3
  •  1
  •   rkg    14 年前

    你为什么要这样?因为B已经从A派生,所以它在A中实现了方法,因此不需要在B中再次实现该方法。

    把B看作是A和B类的联合体。所以B基本上拥有在A中实现的所有方法。而且A不能从 public private ,所以B无法访问 something 功能。