C#方法继承

        面向对象机制为C#的方法引入了virtual,override,sealed,abstract四种修饰符来提供不同的继承需求。

        类的虚方法是可以在该类的继承自类中改变其实现的方法,当然这种改变仅限于方法体的改变,而非方法头(方法声明)的改变。被子类改变的虚方法必须在方法头加上override来表示。当一个虚方法被调用时,该类的实例--亦即对象的运行时类型(run-time type)来决定哪个方法体被调用。我们看下面的例子:


using System;
class Parent
{
    public void F() { Console.WriteLine("Parent.F"); }
    public virtual void G() { Console.WriteLine("Parent.G"); }
}
class Child: Parent
{
    new public void F() { Console.WriteLine("Child.F"); }
    public override void G() { Console.WriteLine("Child.G"); }
}
}

       可以看到class Child中F()方法的声明采取了重写(new)的办法来屏蔽class Parent中的非虚方法F()的声明。而G()方法就采用了覆盖(override)的办法来提供方法的多态机制。需要注意的是重写(new)方法和覆盖(override)方法的不同,从本质上讲重写方法是编译时绑定,而覆盖方法是运行时绑定。值得指出的是虚方法不可以是静态方法--也就是说不可以用static和virtual同时修饰一个方法,这由它的运行时类型辨析机制所决定。override必须和virtual配合使用,当然也不能和static同时使用。

sealed override (密封覆盖),类的继承体系中不想再使一个虚方法被覆盖,sealed override public void F().

你可能感兴趣的:(C#方法继承)