C#之多态

博客介绍了多态,即一个类能表现多种状态。阐述了实现多态的三种手段,包括虚方法,通过父类用virtual、子类用override标记;抽象类,适用于父类方法不知如何实现时;接口,是一种规范和能力。还给出了虚方法和抽象类的举例及结果。

多态:让一个类能够表现多种状态(类型)。

实现多态的3种手段:虚方法,抽象类,接口

1、先介绍虚方法,父类方法用virtual标记(public virtual void SayHello() {......}),子类方法用override标记(public override void SayHello(){......}),父类中放入子类,当调用父类方法时会自动使用子类方法

举例说明

using System;

namespace virsual_override
{
    //
    class Program
    {
        static void Main(string[] args)
        {
            //English en1 = new English("Jim");
            //English en2 = new English("Lucy");
            //Korea kr1 = new Korea("金秀贤");
            //Korea kr2 = new Korea("金正恩");
            //Persion[] pers = { en1, en2, kr1, kr2 };
            Persion[] pers = { new English("Jim"),new English("Lucy"),new Korea("金秀贤"),new Korea("金正恩")};

            for (int i = 0; i < pers.Length; i++)
            {
                pers[i].SayHello();
            }
            Console.Read();
        }
    }
    class Persion
    {
        public string Name { get; set; }
        public Persion(string name)
        {
            this.Name = name;
        }
        public virtual void SayHello()
        {
            Console.WriteLine("我是人类");
        }
    }
    class English : Persion
    {
        public string Name { get; set; }
        public English(string name) : base(name)
        {
            this.Name = name;
        }
        public override void SayHello()
        {
            Console.WriteLine("我是{0}", this.Name);
        }
    }
    class Korea : Persion
    {
        public string Name { get; set; }
        public Korea(string name) : base(name)
        {
            this.Name = name;
        }
        public override void SayHello()
        {
            Console.WriteLine("我是{0}", this.Name);
        }
    }
}

结果显示:

2、抽象类

当父类中的方法不知道怎么实现的时候,可以考虑把父类写成抽象类,把方法写成抽象方法。

using System;

namespace abstract_fangfa
{
    class Program
    {
        static void Main(string[] args)
        {
            //Animal a = new Animal();这样会报错,抽象类不循序实体化
            Animal a = new Dog();
            a.Bark();
            Console.Read();
        }
        
    }
    public abstract class Animal
    {
        public abstract void Bark();
    }
    public class Dog:Animal
    {
        public override void Bark()
        {
            Console.WriteLine("Dog wangwang Barking");
        }
    }
    public class cat : Animal
    {
        public override void Bark()
        {
            Console.WriteLine("Dog miaomiao Barking");
        }
    }
}

结果

3、接口是一种规范,能力

转载于:https://www.cnblogs.com/javier520/p/10828413.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值