2-8 C#多态和虚函数与复写和new

文章介绍了C#编程中的多态性,通过虚函数和派生类的复写功能展示了如何实现对象的不同状态。虚函数在基类中定义,派生类可以复写并提供不同的实现。示例代码包括Dog和Cat类如何继承自一个基类dongwu,并重写Shoot方法,展示不同的行为。同时,文章还涉及了构造函数的调用和使用。
摘要由CSDN通过智能技术生成

一.多态

多态(Polymorphism)按字面的意思就是“一个对象的多种状态

比如说是老师是老师,他也是人,也是丈夫或者妻子,或者光棍儿,这就阐述了多种形态


 二.虚函数与复写和new

虚函数应用于基类中

复写和new用与派生类中,复写可以多次使用

虚函数:public virtual void Shoot() { Console.WriteLine("未知叫声"); }//虚函数

复写:public override void Shoot() { Console.WriteLine("{0}岁的"+base.Name + "汪汪",SetDate.Age); }

//override可以继续继承

public override void Shoot() { Console.WriteLine("{0}岁的" + base.Name + "喵喵", SetDate.Age); }

使用:dongwu dongwu1 = new Dog() {Name="小黑:" };

dongwu1.Shoot();

namespace ConsoleApp1
{
    class SetDate 
    {
        public int Age{ get;set; }
    }
    class dongwu//注意隐私数据仅自己可使用,protect可被其他使用
    {
        protected SetDate SetDate = new SetDate() { Age=1 };
        public string Name { get; set; }//has a

        //当dongwu自己有一个方法的华用base
        public virtual void Shoot() { Console.WriteLine("未知叫声"); }//虚函数
    }
    class A {
        //base访问基类的构造函数 this访问本类的构造函数
        public A() { Console.WriteLine("A()"); }
        public A(string a):this() { Console.WriteLine("A(string)"); }//调用上个A
        public A(int a):this("123") { Console.WriteLine("A(int)"); }//调用上个A

    }
    class B : A
    {
        public B() : base("你好") { Console.WriteLine("B()"); }//base通过你输入的类型自动选择所要调用的基类构造函数
    }
    class Dog: dongwu //只能继承一个基类//is a
    {
       

        public override void Shoot() { Console.WriteLine("{0}岁的"+base.Name + "汪汪",SetDate.Age); }//override可以继续继承
        //public new void Shoot() { Console.WriteLine("{0}岁的"+base.Name + "汪汪",SetDate.Age); }//不想使用复写
    }
    class Cat:dongwu
    {


        public override void Shoot() { Console.WriteLine("{0}岁的" + base.Name + "喵喵", SetDate.Age); }
    }



    class Program
    {

        static void Test(dongwu dongwu)
        {
            Console.WriteLine(dongwu.Name);
            dongwu.Shoot();
        }
        static void Main(string[] args)
        {
            //Dog dog = new Dog() { Name = "小黑" };//属性
            
            A a = new A(123);//先打印A();再A(string);再A(int)
            B b = new B();//先调用基类构造函数后派送类
                          //
            dongwu dongwu1 = new Dog() {Name="小黑:" };//调用了狗通过什么识别?利用virtual和override
            Test(dongwu1);
            dongwu dongwu2 = new Cat() { Name = "小黑:" };
            Test(dongwu2);
            dongwu1.Shoot();
            //Console.WriteLine(dongwu1.Name);



        }


    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

视觉小萌新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值