为什么你会声明一个方法为“虚拟”。
使用 virtual 有什么好处?
Virtual 允许继承类替换基类随后使用的方法。
public class Thingy
{
public virtual void StepA()
{
Console.Out.WriteLine("Zing");
}
public void Action()
{
StepA();
Console.Out.WriteLine("A Thingy in Action.");
}
}
public class Widget : Thingy
{
public override void StepA()
{
Console.Out.WriteLine("Wiggy");
}
}
class Program
{
static void Main(string[] args)
{
Thingy thingy = new Thingy();
Widget widget = new Widget();
thingy.Action();
widget.Action();
Console.Out.WriteLine("Press any key to quit.");
Console.ReadKey();
}
}
当您运行程序时,您的输出将是:
Zing
A Thingy in Action.
Wiggy
A Thingy in Action.
请注意,即使 Widget 调用了在 Thingy 级别定义的 Action () 方法,Thingy 内部也调用了 Widget 的 StepA () 方法。
基本的答案是它给了一个类的继承者更多的灵活性。当然,你必须很好地设计你的类,否则它可能会造成严重。
虚拟方法是一种方法,其中实际的方法调用取决于基础对象的运行时类型。
非虚方法是一种方法,其中调用的实际方法取决于方法调用时对象的引用类型。
virtual 关键字用于修改方法或属性声明,在这种情况下,方法或属性称为虚拟成员。可以通过派生类中的重写成员更改虚拟成员的实现。
调用虚方法时,将检查对象的运行时类型是否有重写成员。如果没有派生类重写该成员,则调用最派生类中的重写成员(可能是原始成员)。(有关运行时类型和大多数派生实现的更多信息,请参见 10.5.3 虚方法。)
默认情况下,方法是非虚拟的。您不能重写非虚拟方法。
不能将虚拟修改器与下列修改器一起使用:
staticabstractoverride除了声明和调用语法的差异之外,虚拟属性的行为类似于抽象方法。
在静态属性上使用虚拟修饰符是错误的。
通过包含使用 override 修饰符的属性声明,可以在派生类中重写虚拟继承属性。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(70条)