老师都有讲课这个方法,一个老师先是在西部偏远山区,是站在教室里木头的黑板前讲课;过了几年表现好,调到了稍微好点的城市里,是坐在教室前用多媒体设备讲课;又过了几年考博士了,毕业后继续当老师,不过现在是躺在家里对着电脑远程授课。都是讲课这个方法,不同的条件下(参数不同)有不同的执行过程和输出结果。这就是重载。
重载的定义是:在同一个类中 ,或者是这个类的子类中,有若干个同名的方法就是重载,不过方法同名但是参数列表必须不同。在子类的情况就是,子类有和父类方法名相同但参数列表不同的方法,而且父类的该名字的方法必须为protected和public型的。
看下面代码:
学校高考完后,有好几个被北大和清华录取了,于是学校请老师去五星级酒店吃饭。门迎见到顾客光临,要称呼:男士/女士,欢迎光临!
using System;
namespace YYS.CSharpStudy.MainConsole
{
public class YSchool
{
private int id = 0;
private string name = string.Empty;
public int ID
{
get
{
return this.id;
}
}
public string Name
{
get
{
return name;
}
}
public YSchool()
{
this.id = 0;
this.name = @"清华大学附中";
}
public YSchool(int id, string name)
{
this.id = id;
this.name = name;
}
/// <summary>
/// 构造器
/// </summary>
public YSchool(int id)
{
this.id = id;
this.name = @"陕师大附中";
}
}
public class YTeacher
{
private int id = 0;
private string name = string.Empty;
private YSchool school = null;
private string introDuction = string.Empty;
private string imagePath = string.Empty;
public int ID
{
get
{
return id;
}
}
public string Name
{
get
{
return name;
}
}
public YSchool School
{
get
{
if (school == null)
{
school = new YSchool();
}
return school;
}
set
{
school = value;
}
}
public string IntroDuction
{
get
{
return introDuction;
}
set
{
introDuction = value;
}
}
public string ImagePath
{
get
{
return imagePath;
}
set
{
imagePath = value;
}
}
/// <summary>
/// 构造器
/// </summary>
public YTeacher(int id, string name)
{
this.id = id;
this.name = name;
}
/// <summary>
/// 构造器
/// </summary>
public YTeacher(int id, string name, YSchool school)
{
this.id = id;
this.name = name;
this.school = school;
}
/// <summary>
/// 给学生讲课的方法
/// </summary>
public void ToTeachStudents()
{
Console.WriteLine(string.Format(@"{0} 老师教育同学们: Good Good Study,Day Day Up!", this.name));
}
/// <summary>
/// 惩罚犯错误学生的方法
/// </summary>
/// <param name="punishmentContent"></param>
public void PunishmentStudents(string punishmentContent)
{
Console.WriteLine(string.Format(@"{0} 的{1} 老师让犯错误的学生 {2}。", this.School.Name, this.name, punishmentContent));
}
}
public class MrTeacher : YTeacher
{
public MrTeacher(int id, string name)
: base(id, name)
{
}
/// <summary>
/// 扩展的方法,刮胡子方法。
/// </summary>
public void Shave()
{
Console.WriteLine(string.Format(@"{0} 老师用飞科剃须刀刮胡子。",this.Name));
}
}
public class MisTeacher : YTeacher
{
public MisTeacher(int id, string name)
: base(id, name)
{
}
/// <summary>
/// 扩展方法,护肤的方法
/// </summary>
public void SkinCare()
{
Console.WriteLine(string.Format(@"{0} 老师用香奈儿护肤霜护肤。", this.Name));
}
}
public class FiveStarsHotel
{
/// <summary>
/// 重载
/// </summary>
public void Welcome(MrTeacher mTeacher)
{
Console.WriteLine(@"先生,欢迎光临!");
}
/// <summary>
/// 重载
/// </summary>
public void Welcome(MisTeacher misTeacher)
{
Console.WriteLine(@"女士,欢迎光临!");
}
}
}
using System;
namespace YYS.CSharpStudy.MainConsole
{
class Program
{
static void Main(string[] args)
{
FiveStarsHotel hotel = new FiveStarsHotel();
MrTeacher mrTeacher = new MrTeacher(1, @"牛轰轰");
Console.WriteLine(@"牛轰轰 来了");
hotel.Welcome(mrTeacher);//男老师进门
MisTeacher misTeacher = new MisTeacher(2, @"郝漂靓");
Console.WriteLine(@"郝漂靓 来了");
hotel.Welcome(misTeacher);//女老师进门
Console.ReadKey();
}
}
}
结果:
看上面的代码中,YTeacher,YSchool中的构造器就是重载的运用。
重载的好处是可以让逻辑更明确,比如上述代码中,Welcome方法其实也可以写一个方法,然后使用if else或者switch语句来判断,最后输出结果。但是我们完成一个工程不光是为了完成某个功能,还要让代码可读性强,逻辑明确,易于维护,所以就要让代码在逻辑上更接近于现实世界的逻辑。使用重载能让代码更好理解,执行步骤也很直观。
代码下载:http://download.csdn.net/detail/yysyangyangyangshan/4393502
分享到:
相关推荐
对于C#中的数据类型、去处符、类、接口、多态、继承、重载、流程控制、命名规则等基础知识进行了精炼的总结归纳,肯定对你有用的。
(2) 实践C#语言基础知识及控制台应用程序开发 (3) 掌握Visual C#.NET类的创建(成员,方法,属性),类的继承,类的多态性及类的方法的重载。 1.3 实验内容 题目: 基于控制台应用程序,设计一个二叉树的实验工具,...
本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和Web应用程序。当然仅靠一章的内容就完全掌握C#语言是不可能的,如需进一步学习C#语言...
《高等学校计算机应用规划教材:Visual C# 2010程序设计教程》详细介绍了Visual C# 2010程序设计的基础知识、基本方法和应用技巧,共分14章,主要内容包括.NET平台与Visual Studio 2010开发环境、C#语言基础及面向...
C#.Net的常见面试试题 <br/> 1.面向对象的思想主要包括什么? <br/>2.什么是ASP.net中的用户控件 <br/>3.什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?...
第1部分 C#语言基础知识 第1章 C#概述 第2章 编写第一个C#程序 第3章 变量的使用 第4章 表达式 第5章 控制代码的流程 第6章 方法 第7章 使用结构组合数据 第2部分 利用C#进行面向...
在本书中,著名的技术作家Jesse Liberty以一种最适合有经验的程序员口味的方式--紧扣Microsoft全新.NET平台的大背景本书的第一部分介绍了C#的基础知识,进而阐释了以下内容:类与对象、继承与多态、操作符重载、...
第1部分 C#语言基础知识 第1章 C#概述 第2章 编写第一个C#程序 第3章 变量的使用 第4章 表达式 第5章 控制代码的流程 第6章 方法 第7章 使用结构组合数据 第2部分 利用C#进行面向...
第二篇是面向对象基础篇,主要介绍类、对象、字段、方法、流程控制、数组、继承、属性、运算符重载、接口等C#基本内容。第三篇是应用技术篇,主要介绍的是异常处理、文件和流、委托、事件、Lambda表达式、命名空间、...
5、方法的重载 概念:方法的重载指的就是方法的名称相同给,但是参数不同。 参数不同,分为两种情况 1)、如果参数的个数相同,那么参数的类型就不能相同。 2)、如果参数的类型相同,那么参数的个数就不能相同。 ***...
《Visual C# 2008大学教程(第3版)(英文版)》:基础知识 NET 3、5、类型、数组、LINQ to Objects I/O、控制语句、运算符 方法、属性、重载 字符串、正则表达式 异常、文件、流、调试器 新的语言特性 LINQ、对象/...
第2章 C#基础.... 23 2.1 引言...... 23 2.2 第一个C#程序...... 23 2.2.1 代码..... 24 2.2.2 编译并运行程序..... 24 2.2.3 详细介绍..... 25 2.3 变量........ 27 2.3.1 变量的初始化..... 27 2.3.2 变量的作用域...
《C#开发实例大全(基础卷)》筛选、汇集了C#开发从基础知识到高级应用各个层面约600个实例及源代码,每个实例都按实例说明、关键技术、设计过程、详尽注释、秘笈心法的顺序进行了分析解读。全书分6篇共25章,主要...
第1部分 C#语言基础知识 第1章 C#概述 第2章 编写第一个C#程序 第3章 变量的使用 第4章 表达式 第5章 控制代码的流程 第6章 方法 第7章 使用结构组合数据 第2部分 利用C#进行面向...
第1部分 C#语言基础知识 第1章 C#概述 第2章 编写第一个C#程序 第3章 变量的使用 第4章 表达式 第5章 控制代码的流程 第6章 方法 第7章 使用结构组合数据 第2部分 利用C#进行面向...
第1部分 C#语言基础知识 第1章 C#概述 第2章 编写第一个C#程序 第3章 变量的使用 第4章 表达式 第5章 控制代码的流程 第6章 方法 第7章 使用结构组合数据 第2部分 利用C#进行面向...
第1部分 C#语言基础知识 第1章 C#概述 第2章 编写第一个C#程序 第3章 变量的使用 第4章 表达式 第5章 控制代码的流程 第6章 方法 第7章 使用结构组合数据 第2部分 利用C#进行面向...
第1部分 C#语言基础知识 第1章 C#概述 第2章 编写第一个C#程序 第3章 变量的使用 第4章 表达式 第5章 控制代码的流程 第6章 方法 第7章 使用结构组合数据 第2部分 利用C#进行面向...
第1部分 C#语言基础知识 第1章 C#概述 第2章 编写第一个C#程序 第3章 变量的使用 第4章 表达式 第5章 控制代码的流程 第6章 方法 第7章 使用结构组合数据 第2部分 利用C#进行面向...