C#new隐藏父类方法

C#new隐藏父类方法

Child child = new Child();
child.A();
child.B();

Parent p = child as Parent;//将child转型为一个parent
p.A();
p.B();

Console.Read();

public class Parent
{
    public void A()
    {
        Console.WriteLine("父类newA");
    }
    public virtual void B()
    {
        Console.WriteLine("父类虚B");
    }
}
public class Child : Parent
{
    public  new void A()
    {
        Console.WriteLine("子类newA");
    }
    public override void B()
    {
        Console.WriteLine("子类虚B");
    }
}

重写(virtaul)时,定义的变量为父类或子类, 赋值为子类时. 皆调用子类的重写方法;(会从子类中查找有重写则调用, 没则调用基类方法)

隐藏(new)时,定义的变量为父类则调用父类的方法(不管赋值是子类还是父类),定义的变量为子类则调用子类的方法。(使用场景: 当子类想取的一方法名称与父类相同时, 可以使用. 子类的方法与父类的方法相对来说是没有直接的关系(继承,重写==). )

posted @ 2022-05-04 18:09  有诗亦有远方  阅读(123)  评论(0)    收藏  举报  来源