普通方法,virtual虚方法,abstract抽象方法 的区别

    xiaoxiao2021-04-15  278

     普通方法在子类中 可以用 new 隐藏  new可写/可不写

    虚方法 在子类中可以 用 override 复写也可以 用 new 隐藏  new可写/可不写

    抽象方法没有方法体,在子类中必须override 复写 

     

    public abstract class Parent { //普通方法可以用 new 隐藏 new可写/可不写 public void CommonSay() { Console.WriteLine("父级的普通方法"); } //虚方法 在子类中可以 用 override 复写也可以 用 new 隐藏 new可写/可不写 public virtual void VirtualSay() { Console.WriteLine("父级的虚方法"); } //抽象方法没有方法体,在子类中必须override 复写 public abstract void AbstractSay(); } public class Child: Parent { public new void CommonSay() { Console.WriteLine("子级的普通方法"); } public override void VirtualSay() { Console.WriteLine("子级的虚方法"); } public override void AbstractSay() { Console.WriteLine("子级的复写抽象方法"); } }

    执行以下代码用谁的方法:

    static void Main(string[] args) { Parent parent = new Child(); parent.CommonSay(); parent.VirtualSay(); parent.AbstractSay(); Console.ReadLine(); }

    普通方法 由编译时决定--提高效率

    所以确定的左边的类型 是 parent 那么右边的类型 不管是child 还是 parentChild 都没有用

    虚方法由运行时决定--多态灵活

    子类复写了就用子类的,没有复写就用父类的

    抽象方法由运行时决定--多态灵活

    父类根本没有方法体,只能用子类的

     

     


    最新回复(0)