• 【C#】重写和重载的区别


    导读:学习C#的时候,其实没想那么多的。就想着把视频看完,把例子做一下就好了,其实真心不懂那些玩意儿是什么,就好像是又回到了学VB的时候。可是,边上师哥压榨我这本就不聪明的脑袋瓜,问了我好多问题,于是乎,昏天暗地的去给这些问题找答案。唉!那天,师哥问了我几个问题:构造函数是干什么的?重写是什么?重载是什么?重写和重载的区别的是什么?它们分别怎么用?额,先简单说一下吧,以后认识深刻了,再回头修改。


    一、基本定义

    构造函数:是一种特殊的方法 。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。((C#中讲面向对象的继承的时候讲了,我是没怎么在意,师哥那么一说,才。。。。。)

    重写:当一个子类继承一父类,而子类中的方法与父类中的方法的名称,参数个数、类型都完全一致时,就称子类中的这个方法重写了父类中的方法。

    重载:一个类中的方法与另一个方法同名,但是参数表不同,这种方法称之为重载方法。

    PS:理解概念

    重载:当年,大街上遇上了一个男的,对他产生了深深地爱意。事过多年,在同一个地点,遇上了同一个人,但此时,再也产生不了当年的爱意。同样的大街(类),同样的人(方法),因为条件改变(参数类型),就再也产生不了爱意(返回结果),这时候,我的感情就被重载了。(或许是厌恶、是冷漠)


    二、实现方法

    重写:通常,派生类继承基类的方法。因此,在调用对象继承方法的时候,调用和执行的是基类的实现。但是,有时需要对派生类中的继承方法有不同的实现。例如,假设动物类存在“跑"的方法,从中派生出马和狗,马和狗的跑得形态是各不相同的,因此同样方法需要两种不同的实现,这就需要"重新编写"基类中的方法。"重写"基类方法就是修改它的实现或者说在派生类中重新编写。

    重载:在一个类中用相同的名称但是不同的参数类型创建一个以上的过程、实例构造函数或属性。


    三、举例说明

    1,重写

    <span style="font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace OverrideTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                my HHX = new my();
                HHX.talk();
            }
            public class you
            {
                public virtual void talk()
                {
                    Console.WriteLine("one");
                }
            }
            public class my : you
            {
                public override void talk()
                {
                    Console.WriteLine("two");
                }
            }
        }
    }</span></span>
    输出结果:

    2,重载

    <span style="font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 重载
    {
        class Program
        {
            static void Main(string[] args)
            {
                string s = null;
                show(s);
                object a = "123";
                show(a);
            }
            
                static void show(string s)
                {
                    Console.WriteLine("string");
                }
                static void show(object o)
                {
                    Console.WriteLine("object");
                }
            }
        }</span><span style="font-family:KaiTi_GB2312;font-size:24px;">
    </span></span>
    输出结果:



    四、区别

    经过上面的两个简单例子,现在,总结一下重载和重写的区别。


    五、个人总结

    其实吧,开始挺讨厌师哥的(反正师哥没加我博客,哈哈)。都学了那么久了,懂得肯定比我多很多,每次那么一说,我这就心疼、肝疼,敢情自己折腾了半天,到那儿了还不够师哥噻牙缝呢。开始是怎么做怎么都不对,自己觉得挺对的,师哥一看就又不对了。说句良心话,真的很受挫,都不想学习了。

    其实吧,师哥也挺好的。老师说了:不怕不知道,就怕不知道。虽然对于这些问题还是有问题,但总比什么都不知道的好,这次懂点,下次懂点,指不准哪天就懂了。所以说:何下下同学,好好学习吧,咱得越挫越勇才行!


  • 相关阅读:
    如何设计一个安全的对外接口?
    Java架构师必须知道的 6 大设计原则
    Spring Boot 如何快速改造老项目?
    Java 类中可以覆盖静态方法吗?
    Dubbo 的心跳设计,值得学习!
    在滴滴和头条干了 2 年后端开发,太真实…
    别乱提交代码了,看下大厂 Git 提交规范是怎么做的!
    3种骚操作,教你查看 Java 字节码!
    sysbench测试服务器性能
    mysql DDL时出现的锁等待状态
  • 原文地址:https://www.cnblogs.com/hhx626/p/6010464.html
Copyright © 2020-2023  润新知