zoukankan      html  css  js  c++  java
  • 【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>
    输出结果:



    四、区别

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


    五、个人总结

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

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


  • 相关阅读:
    websocket简单理解
    对两个列表合成一个列表后进行排序
    爬取今日头条财经版块新闻
    Python的hasattr(),getattr(),setattr()
    Django基础
    pymysql模块的使用
    我一定要学好英语
    Django项目的创建
    MySQL数据库(安装+增删改查)
    jQuery
  • 原文地址:https://www.cnblogs.com/hhx626/p/6010464.html
Copyright © 2011-2022 走看看