码迷,mamicode.com
首页 > Windows程序 > 详细

C#重载重写重构

时间:2016-01-03 17:37:20      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

前言

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

重构、重写、重载

        重构就是通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。通俗点说,重构,就是改善既有代码的设计,让代码更加的符合面向对象规则。

        而重写是出现在多态里的,virtual关键字声明虚方法,子类通过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 "";
    }
}
        这时候子类就非常简单了。比如,我们还让猫来叫。
class Cat : Animal
{
    public Cat():base()
    {}
    public Cat(string name):base(name)
    {}
    protected override string getShoutSound()
    {
        return "喵"
    }
}
        其余几个动物都和猫一样,改下叫声就好了。虽然具体动物没有了Shout方法,但是它继承于Animal,Animal的Shout方法就可以被具体的动物继承,当然,外界也也可以调用具体动物的这个方法。
        这就是重构,发现了之前的代码有错误,重复等,就重构代码,使其更为出色的完成功能。

总结

        这篇博客,本来想直接写重构,但是,重构,重写,重载,都有个重字,更应该比较着去学习它们,简单来说,重构就是当你发现代码的不优之处时,去修改它的结构,去优化它。重写就是定义一个虚方法,子类去重写,它可以不同名,而重载必须是同名的,他相当于什么呢?我的理解就是,给你一个默认的方法,再给你一个其他方法,你可以使用默认的方法,也可以使用另外一个,但这两个方法名是相同的。
        通过总结这篇博客,我发现对比学习能更好的促使我们去发现,去记忆一些东西,分享给大家。


C#重载重写重构

标签:

原文地址:http://blog.csdn.net/sds15732622190/article/details/50448602

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!