C# virtual, base, override

本文深入解析了C#编程中虚方法的使用及其与多态性的关系,通过实例展示了如何在基类与派生类间实现方法重写与调用,以及在不同场景下虚方法的应用价值。

先看这样一段代码:

namespace @virtual
{
    class A
    {
        public void print()
        {
            Console.WriteLine("base");
        }
    }
    class a :A{
        public void print()
        {
            Console.WriteLine("derive");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            A p = new A();
            p.print();
            p = new a();
            p.print();
            Console.ReadKey();
        }
    }
}

output:
base
base

p调用了基类的同名方法,如果想使用子类的print()需要用virtual修饰基类的print()再在子类中override重写print(),那样才能调用派生类的方法

namespace @virtual
{
    class A
    {
        public virtual void print()
        {
            Console.WriteLine("base");
        }
    }
    class a :A{
        public override void print()
        {
            Console.WriteLine("derive");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            A p = new A();
            p.print();
            p = new a();
            p.print();
            Console.ReadKey();
        }
    }
}

output:
base
derive

它达到的效果和下面的代码是一样的:


namespace @virtual
{
    class A
    {
        public void print()
        {
            Console.WriteLine("base");
        }
    }
    class a :A{
        public void print()
        {
            Console.WriteLine("derive");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            A p = new A();
            p.print();
            a p1 = new a();
            p1.print();
            Console.ReadKey();
        }
    }
}

output:
base
derive

base则是对在派生类里对基类成员的访问。在基类数据成员或方法被子类同名成员隐藏的情况下,它能发挥巨大的作用。

namespace @base
{
    class A
    {
        public void print()
        {
            Console.WriteLine("base");
        }
    }
    class a :A{
        public void print()
        {
            Console.WriteLine("derive");
        }
        public void fatherPrint()
        {
            base.print();
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            a p1 = new a();
            p1.fatherPrint();
            p1.print();
            Console.ReadKey();
        }
    }
}

output:
base
derive

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值