前言

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

重构、重写、重载

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

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

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

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

样例

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

        如今。全然能够再创建两个类,模仿狗和猫。继承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方法就能够被详细的动物继承。当然。外界也也能够调用详细动物的这种方法。

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

总结

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

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

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

【C#】重载重写重构的更多相关文章

  1. Java重载重写与实现方法的规则

    这几天在实训过程中做到了一个题,这个题目问的是 非抽象类实现接口后,必须实现接口中的所有抽象方法,除了abstract外,方法头必须完全一致.这句话是错误的.然后在做错以后自己总结一下重载 重写 和实 ...

  2. 重载重写重定义-易混淆概念-C++编译器处理方式

    1.函数重载 1)必须在同一个类中进行. 2)子类无法重载父类的函数,父类同名函数将被名称覆盖 3)重载是在编译期间根据参数类型和个数决定函数调用 2.函数重写 1)必须发生于父类与子类之间 2)并且 ...

  3. java的多态以及重载,重写,前期绑定,后期绑定

    多态的定义: 一个类实例的相同方法在不同情形有不同表现形式.多态机制使具有不同内部结构的对象可以共享相同的外部接口.这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通 ...

  4. java 方法的重载重写

    面向对象有三大特性:封装,继承,多态 多态则需要满足三大条件1要有继承2要有重写3父类引用子类对象 很多人对方法的重载重写有很大疑问,下面我来介绍一下方法的重载重写 方法重载就是方法名称重复,加载参数 ...

  5. [Java]重载,重写以及继承,多态的区别

    转自:http://android.blog.51cto.com/268543/53181 什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承. ...

  6. C#重载重写

    overload:重载指的是同一个类中有两个或多个名字相同但是参数不同的方法,(注:返回值不能区别函数是否重载),重载没有关键字.override:过载也称重写是指子类对父类中虚函数或抽象函数的“覆盖 ...

  7. c++ 浅拷贝和深拷贝 指针和引用的区别 malloc(free)和new(delete)的区别 重载重写重定义

    4.malloc(free)和new(delete)的区别 malloc()函数: 1.1 malloc的全称是memory allocation,中文叫动态内存分配. 原型:extern void ...

  8. C++ 重载 重写 重定义

    重写:存在于类的继承,修饰符是virtual,函数的参数个数,顺序,类型,均相同. 重载:函数的参数列表,类型,顺序不相同. 重定义:对父类的函数进行屏蔽,参数列表可以不相同,没有virtual修饰

  9. C++ 学习笔记 (八)重载 重写 重定义以及名字覆盖

    学习C++必定会遇到重载.重写.重定义.概念的东西多也是学习C++蛋疼之处,但是还是得弄懂,学懂了也就不觉得多了. 概念,特点: 重载: 直白点说就是函数名字相同,传参的个数,类型不一样.判断标准在于 ...

随机推荐

  1. hihocoder 1174 [BFS /拓扑排序判断是否有环]

    hihocoder 1174 [算法]: 计算每一个点的入度值deg[i],这一步需要扫描所有点和边,复杂度O(N+M). 把入度为0的点加入队列Q中,当然有可能存在多个入度为0的点,同时它们之间也不 ...

  2. 训练指南 UVALive - 3523 (双联通分量 + 二分图染色)

    layout: post title: 训练指南 UVALive - 3523 (双联通分量 + 二分图染色) author: "luowentaoaa" catalog: tru ...

  3. POJ2349 Arctic Network(Prim)

    Arctic Network Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 16968   Accepted: 5412 D ...

  4. ( 转 ) 优秀REST风格 API的设计原则

    设计优秀的REST风格API非常困难!API是服务提供方和使用方之间的契约,打破该契约将会给服务端开发人员招来非常大的麻烦,这些麻烦来自于使用API的开发人员,因为对API的改动会导致他们的移动app ...

  5. POJ 2226 Muddy Fields (二分图匹配)

    [题目链接] http://poj.org/problem?id=2226 [题目大意] 给出一张图,上面有泥和草地,有泥的地方需要用1*k的木板覆盖, 有草地的地方不希望被覆盖,问在此条件下需要的最 ...

  6. 【记忆化搜索】bzoj3208 花神的秒题计划Ⅰ

    暴力 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #de ...

  7. python3 开发面试题(%s和format的区别)5.31

    在格式化字符串中有两种方法: 1.%s 2.format 大家常用的是哪一种方法?为什么要用你选的这种方法? 我们先看一个例子: 首先我们定义一个我军需要击杀的恐怖分子的地理坐标为 c=(128,12 ...

  8. JQuery中的动画(ppt)

    <!DOCTYPE html> <html> <head> <title>test1.html</title> <meta http- ...

  9. u-boot-2012.10移植到AT91RM9200(包括NAND FLASH)

    基于中嵌SRM9204 目  录 1 配置 1.1修改顶层Makefile(可选) 1.2配置 1.3下载.运行.测试 2 修改内存配置参数(根据芯片手册修改) 2.1 修改配置参数 2.2 编译 2 ...

  10. Step by Step 使用HTML5开发一个星际大战游戏(2)

    HTML5 Canvas Game: 玩家飞船  本系列博文翻译自以下文章 http://blog.sklambert.com/html5-canvas-game-the-player-ship/ L ...