我有:
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()
{
}
}
答案 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方法。