继承与方法重写

本文通过一个C#中的具体示例,演示了多态性的使用方式,并展示了基类与派生类之间的方法调用过程及结果差异。特别关注了方法重写与隐藏的区别及其对程序运行时行为的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  public class A
    {
        public virtual void Fun1(int i)
        {
            Console.WriteLine(i);
        }

        public void Fun2(A a)
        {
            a.Fun1(1);
            Fun1(5);
        }
    }

    public class B : A
    {
        public override void Fun1(int i)
        {
            base.Fun1(i + 1);
        }
    }

    class Program
    {
        public static void Main()
        {
            B b = new B();
            A a = new A();
            a.Fun2(b);
            b.Fun2(a);

            Console.ReadKey();
        }
    }

输出结果是

  A a = new A(); B b = new B();

 a.Fun2(b);  

2    b.Fun1(1);

5    a.Fun1(5);

 

b.Fun2(a);

1   a.Fun1(1);

6   b.Fun1(5)

需要留意的是类A中的Fun2方法,在里面调用Fun1的时候,相当于是this.Fun1

 

 

 

 

ps:如果把B中的override改为new的话,输出的结果:

1

5

1

5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值