【发布时间】:2017-01-08 01:26:10
【问题描述】:
假设我有这个:
使用系统; 公开课程序 { 公共静态无效 Main() { BaseClass bc = new DerivedClass(); bc.Method1(); bc.Method2(); Console.WriteLine(bc.GetType().FullName); // 输出 // 派生 - 方法 1(覆盖) // 基础 - 方法 2 // 派生类 } } 公共类 BaseClass { 公共虚拟无效方法1() { Console.WriteLine("Base - Method1"); } 公共虚拟无效方法2() { Console.WriteLine("Base - Method2"); } } 公共类 DerivedClass : BaseClass { 公共覆盖无效方法1() { Console.WriteLine("Derived - Method1 (override)"); } 公共新无效方法2() { Console.WriteLine("Derived - Method2 (new)"); } }如果派生类的实例变量 cast 到基类并且该实例变量用于调用被覆盖的方法,则使用 override 关键字覆盖的方法将在派生类中执行实现,而用 new 关键字覆盖的将在基类中执行。
上面示例中的变量bc是如何转换为基类的?
我知道new关键字会覆盖派生类中的方法实现,并且会在派生类的实例变量用于调用被覆盖的方法时执行,但我不知道不知道它是什么类型的转换.. 似乎不是隐式或显式的,可能是类型转换,但我对语法感到困惑。
感谢任何解释。
【问题讨论】:
-
您似乎并不完全了解
virtual的工作原理。阅读this。
标签: c# inheritance casting