• 【C#】重载重写重构


    前言

            前几篇博客说了重写和重载。今天主要说重构,顺便比較一下三者。

    重构、重写、重载

            重构就是通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理。提高软件的扩展性和维护性。

    通俗点说,重构。就是改善既有代码的设计,让代码更加的符合面向对象规则。

            而重写是出如今多态里的。virtualkeyword声明虚方法,子类通过override来实现方法重写。在父类里声明了一个模糊的方法,并不给出详细的行为,在子类里,通过重写父类中的这种方法,让这种方法实例化,去适合子类。

            重载,通俗来讲,它的作用就是能够让我们的选择很多其它。比方在类中声明了一个方法。可是在我实际调用时,这种方法有时候符合我想要的。有时候不符合,就比方一个婴儿出生。父母可能在出生前就想好了婴儿的名字。也可能出生后也没有想好。假设仅仅用构造函数的话,仅仅有一个方法,不能满足我的要求,这时候就要用到方法重载,之前的的方法保留,再添加一个方法。接着这个样例,假设父母给婴儿娶了名字,那么。用原有的方法。假设没有取名字,就会用重载后的方法。

    样例

            先说重构的样例。
    接着上次的比赛。如今又来了小牛和小羊报名叫声比赛,应该怎样做呢?让我们先来看一下在多态中是怎么做的。

            如今。全然能够再创建两个类,模仿狗和猫。继承Animal。其它除了叫声以外保持不变,这样。完毕后。能非常完美的执行,而且有我们想要的功能。
            可是,没有错误不一定代表着优秀,我们发现,除了四种动物的叫声不同外。其它差点儿没有不论什么差异,这就犯了反复的毛病。
            既然有反复的。就要把反复的提取出来放到Animal中,可是,Animal是个抽象的类,没有详细的叫声,我们就把叫声部分改成另外一个方法:getShoutSound。接下来让我们来实现一下。
    class Animal
    {
        ……
        public string Shout()
        {
            string result = "";
            for (int i = 0; i < shoutNum; i++)
                result += getShoutSound() + ",";
            return "我的名字叫" + name + " " + result;
        }
        protected virtual string getShoutSound()
        {
            //“得到叫声”,虚方法。让子类重写。仅仅须要给继承的子类使用,所以用protected修饰符。
            return "";
        }
    }
            这时候子类就很easy了。比方,我们还让猫来叫。
    class Cat : Animal
    {
        public Cat():base()
        {}
        public Cat(string name):base(name)
        {}
        protected override string getShoutSound()
        {
            return "喵"
        }
    }
            其余几个动物都和猫一样,改下叫声就好了。

    尽管详细动物没有了Shout方法,可是它继承于Animal,Animal的Shout方法就能够被详细的动物继承。当然。外界也也能够调用详细动物的这种方法。

            这就是重构。发现了之前的代码有错误。反复等,就重构代码,使其更为出色的完毕功能。

    总结

            这篇博客,本来想直接写重构,可是,重构,重写,重载,都有个重字,更应该比較着去学习它们,简单来说。重构就是当你发现代码的不优之处时,去改动它的结构。去优化它。

    重写就是定义一个虚方法,子类去重写,方法名,參数,返回值等必须是同样的;重载也必须是同名的。但其參数和返回值能够不同。他相当于什么呢?我的理解就是,给你一个默认的方法,再给你一个其它方法,你能够使用默认的方法,也能够使用另外一个。但这两个方法名是同样的。

            通过总结这篇博客。我发现对照学习能更好的促使我们去发现。去记忆一些东西,分享给大家。


  • 相关阅读:
    类的再理解
    关于网络配置和zmp以及json
    PCL 库安装
    Ros学习注意点
    Ros集成开发环境配置
    《TCP/IP详解卷1:协议》第3章 IP:网际协议(1)-读书笔记
    《Effective C++》第1章 让自己习惯C++-读书笔记
    《TCP/IP详解卷1:协议》第2章 链路层-读书笔记
    《TCP/IP详解卷1:协议》第1章 概述-读书笔记
    C++内存分配与对象构造的分离
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/7250912.html
Copyright © 2020-2023  润新知