C# 学习之旅(二)简单的继承多态介绍

本文详细介绍了 C# 中的继承机制,包括单继承特性、virtual 和 override 的使用方式,以及 sealed 关键字的作用。同时,文章还探讨了 new 关键字如何隐藏基类方法,并解释了继承中的构造函数调用顺序。此外,文中还涉及了重载的概念以及静态与动态多态的区别。

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

     继承

    C#中,每个类只能继承一个类


    virtual和override关键字

    C#中,类的函数中有关键字virtual,那么它是可以被继承它的类加关键字 override 重写的,当然也可以不被重写,同样是可以使用的,但你是不能override一个没有关键字virtual的函数的。

    

     如果一个类的函数没有加关键字virtual,那么在继承的类中也是可以改写的,只需要在函数中添加关键字new告诉程序隐藏起父类的同名函数即可,如果不加也是可以编译通过,只是会有一个warning提示。


     override是告诉程序我要改写父类的方法,而new则是告诉程序隐藏起父类的方法,它们的实现是不一样的


     sealed关键字:表示该类无法被继承


   class Program
    {
        static void Main(string[] args)
        {
            Dog dog = new Dog();
            dog.Bite();
            dog.Age = 10;
            Console.WriteLine(dog.getAge());
            dog.BiteMan();
        }
    }

    class Animal
    {
        public int Age;
        public virtual void Bite()
        {
            Console.WriteLine("animal bite");
        }
        public virtual int getAge()
        {
            return Age;
        }

        public void BiteMan()
        {
            Console.WriteLine("Animal bite man");
        }
    }

    sealed class Dog :Animal
    {
        public override void Bite()
        {
            Console.WriteLine("dog bite");
        }

        public new void BiteMan()
        {
            Console.WriteLine(" bite man");
        }
    }

    //无法继承
    class Cat : Dog
    {
    }


补充的:

    关于override和new关键字还有一点,如果我是用父类类型来声明一个子类的话,那么override的函数是子类的函数,而new关键字的函数是父类的函数




继承关系的实例化顺序:首先调用父类的构造函数,然后是子类的构造函数


重载:

    class Program
    {
        static void Main(string[] args)
        {
            PrintHello();
            Complex c1 = new Complex();
            Complex c2 = new Complex();
            c1.number = 2;
            c2.number = 3;
            Console.WriteLine((c1 + c2).number);

        }

        //可以传参不同重载,但不能传参一样但返回值不同
        public static void PrintHello()
        {
            Console.WriteLine("hello world");
        }
        public static void PrintHello(string toWho)
        {
            Console.WriteLine("hello {0}", toWho);
        }

        
    }

    //运算符重载
    class Complex
    {
        public int number;

        public static Complex operator +(Complex c1,Complex c2)
        {
            Complex c = new Complex();
            c.number = c1.number + c2.number;
            return c;
        }
    }



多态:一个形态,多个功能

静态多态:编译时候就已经知道,主要通过程序重载来实现

动态多态:只有程序具体运行时候才知道是什么功能,通过override重写达到目的


    class Program
    {
        static void Main(string[] args)
        {
            Human human1 = new Man();
            Human human2 = new Woman();
            human1.CleanRoom();
            human2.CleanRoom();
        }
     }

    class Human
    {
        public virtual void CleanRoom()
        {
            Console.WriteLine("Human Clean Room");
        }
    }

    class Man:Human
    {
        public override void CleanRoom()
        {
            Console.WriteLine("Man clean room slowly");
        }
    }

    class Woman:Human
    {
        public override void CleanRoom()
        {
            Console.WriteLine("Woman clean room quickly");
        }
    }
}



      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值