c#中子类使用被隐藏的父类方法



c#子类使用被隐藏的父类方法

   在C#中,在子类中可用new修饰一个方法,实现了在子类中隐藏父类方法。但有时我们可能需要通过子类对象使用已被隐藏了的父类方法,这时可通过将子类转换为父类来调用被隐藏了的父类方法,这样,子类对象既也可以使用自身新定义的方法,也可以使用已被隐藏的父类的方法。以下是一个示例.

 class Program {
        static void Main(string[] args) {

            B b = new B();
            b.Age = 10;
            b.SayMyAge();
            ((A)b).SayMyAge();

            b.SayMyAge();
            Console.ReadLine();

        }
    }


    class A {
        public int Age { get; set; }
        public void SayMyAge ()
            {
            Console.WriteLine("I am {0} years old.",Age);
           
        }
    }
    class B : A {
  
        public new void SayMyAge() {
            Console.WriteLine("我 {0} 岁了.",Age);
        }
    }

执行结果如下:

可见,通过(A)b这个命令生成一个匿名对象,该对象是b的浅拷贝副本,仍指向b,且这个匿名副本对象对应的类型为A。所以它执行的是A类的方法。同时,可以看到,(A)b对b对象没有任何影响。

用父类实例化子类(如A c=new B()),或引用对象的类型是父类,而实例是子类(如通过 A c=(A)b),这类情况姑称为“父类子体”。new 的作用有二,一是隐藏父类方法,二是在“父类子体”情况下恢复父类方法。这样对于有用了new 修饰的方法的子类而言,既可用子类的方法,也可用同名的父类方法,这也算是一种方法“双活”吧。

举一个例子,父类中有一个ToString()方法,但不是很好用,在子类中用new 了一个新的ToString()方法,这样子类实体执行ToString()时执行的是子类中的方法,但有时需要这个子类实体执行父类中的ToString()方法,这时就可以用上述方法来实现了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值