请看代码: 1 public abstract class ViewBaseContainer : Page
2 {
3 protected abstract ControllerBaseContainer CreateConcreteContainer (Page owner);
4 }
5 public class BasePage : ViewBaseContainer
6 {
7 protected override ControllerBaseContainer CreateConcreteContainer(BasePage owner)
8 {
9 }
10 }在BasePage中重写方法CreateConcreteContainer(),传递的参数是BasePage的对象,会导致编译失败,这里传递的参数必须为Page的对象吗?为什么?
2 回答
达令说
TA贡献1821条经验 获得超6个赞
因为override基类的virtual方法必须保证签名相同,参见:C#语言规范4.0,第1.6.6.4节。摘录如下:
1.6.6.4 虚方法、重写方法和抽象方法
若一个实例方法的声明中含有 virtual 修饰符,则称该方法为虚方法 (virtual method)。若其中没有virtual 修饰符,则称该方法为非虚方法 (non-virtual method)。
在调用一个虚方法时,该调用所涉及的实例的运行时类型 (runtimetype) 确定了要实际调用的方法实现。在非虚方法调用中,实例的编译时类型 (compile-timetype) 负责做出此决定。
虚方法可以在派生类中重写 (override)。当某个实例方法声明包括 override 修饰符时,该方法将重写所继承的具有相同签名的虚方法。虚方法声明用于引入新方法,而重写方法声明则用于使现有的继承虚方法专用化(通过提供该方法的新实现)。
- 2 回答
- 0 关注
- 509 浏览
添加回答
举报
0/150
提交
取消