如何将接口方法继承到C#中的子类

时间:2010-10-20 21:39:12

标签: c#

我有:

I:

public interface I
{
    void Something();
}

A:

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

B:

public class B : A
{
}

为什么B不被强制实施(decired)Something方法,正如预期的那样?

我真的必须在我的所有B(子类到A)上继承我吗?

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

3 个答案:

答案 0 :(得分:6)

由于B 已经继承自Something的{​​{1}}方法。

因此A不是强制来实施B方法。 B 另一方面,如果需要,可以覆盖Something的{​​{1}}方法,只要A方法标记为Something在班级Something中:

virtual

答案 1 :(得分:1)

你为什么期望它?由于B已经从A派生,因此它具有在A中实现的方法。因此,它不需要在B中再次实现该方法

将B视为A和B类的联合。因此B基本上具有在A中实现的所有方法。另外,A不能将方法的范围从public减少到private,因此B无法访问something函数。< / p>

答案 2 :(得分:1)

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

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

另一方面,如果你想允许B覆盖A中定义的方法,你应该在A中创建虚拟方法,然后使用override关键字覆盖B中的方法。现在你的Something方法是在A中不是虚拟的,所以如果你试图在B中覆盖它,编译器会给你和错误或警告说你正在“隐藏”基类中的Something方法。

相关问题