C#多态前奏
2015-11-15 15:50
267 查看
“龙生蛇,凤生鸡,老鼠的儿子会吃鸡”,这是自然界中的变异法则在起作用,面向对象语言借用了变异的思想方法,从而实现了多态性。
同一操作,作用于不同的对象,可以有不同的解释,从而产生不同的执行结果,这就是多态性,也可以说是同一个类型的实例调用相同的方法,产生的结果是不同的。C#多态性涉及到了重载、重写、虚方法、抽象方法和隐藏方法,因此先对这些概念进行简单总结。
(一、)重载(overload)
在同一作用域的两个或多个方法函数名相同,参数列表不同的方法叫做重载。
重载的三个特点:
1、方法名必须相同
2、参数列表必须不相同
3、返回值类型可以不相同
子类中为满足自己的需要来重复定义某个方法的不同实现,需要用override关键字,被重写的方法必须是虚方法,用的是virtual关键字。
重写的特点是方法名、参数列表、返回值都相同。
虚方法即为基类中定义的允许在派生类中重写的方法,使用virtual关键字定义。
在基类中定义的并且必须在派生类中重写的方法,使用abstract关键字定义。抽象方法只能在抽象类中定义,且因抽象类无法实例化,抽象方法不能被调用。
抽象方法是用abstract修饰;抽象方法没有方法体;抽象方法必须在抽象类中;父类是抽象类,子类继承了这个类,必须把抽象类中的抽象方法重写。
(五、)隐藏方法
在派生类中定义的和基类中的某个方法同名的方法,使用new关键字定义。如在基类Animal中有一方法Sleep():
以上就是C#多态性一些相关概念的简单总结。。。
同一操作,作用于不同的对象,可以有不同的解释,从而产生不同的执行结果,这就是多态性,也可以说是同一个类型的实例调用相同的方法,产生的结果是不同的。C#多态性涉及到了重载、重写、虚方法、抽象方法和隐藏方法,因此先对这些概念进行简单总结。
(一、)重载(overload)
在同一作用域的两个或多个方法函数名相同,参数列表不同的方法叫做重载。
重载的三个特点:
1、方法名必须相同
2、参数列表必须不相同
3、返回值类型可以不相同
public static int AddNumber(int num1, int num2) { return num1 + num2; } public static double AddNumber(double num1, double num2) { return num1 + num2; }(二、)重写(override)
子类中为满足自己的需要来重复定义某个方法的不同实现,需要用override关键字,被重写的方法必须是虚方法,用的是virtual关键字。
重写的特点是方法名、参数列表、返回值都相同。
//父类 public virtual void EatFood() { Console.WriteLine("Animal吃东西"); } //子类 public override void EatFood() { Console.WriteLine("Cat吃东西"); }(三、)虚方法
虚方法即为基类中定义的允许在派生类中重写的方法,使用virtual关键字定义。
public virtual void EatFood() { Console.WriteLine("Animal吃东西"); }虚方法调用
Animal A = new Animal(); A.EatFood();(四、)抽象方法
在基类中定义的并且必须在派生类中重写的方法,使用abstract关键字定义。抽象方法只能在抽象类中定义,且因抽象类无法实例化,抽象方法不能被调用。
public abstract class Animal { //字段、属性 public abstract void Shout();//抽象方法 } public class Pig : Animal { public override void Shout() { Console.WriteLine("哼哼叫"); } }
Pig pig = new Pig(); pig.Shout(); Console.ReadKey();
抽象方法是用abstract修饰;抽象方法没有方法体;抽象方法必须在抽象类中;父类是抽象类,子类继承了这个类,必须把抽象类中的抽象方法重写。
(五、)隐藏方法
在派生类中定义的和基类中的某个方法同名的方法,使用new关键字定义。如在基类Animal中有一方法Sleep():
public void Sleep() { Console.WriteLine("Animal Sleep"); }则在派生类Cat中定义隐藏方法的代码为:
new public void Sleep() { Console.WriteLine("Cat Sleep"); }隐藏方法不但可以隐藏基类中的虚方法,而且也可以隐藏基类中的非虚方法;隐藏方法中父类的实例调用父类的方法,子类的实例调用子类的方法。
以上就是C#多态性一些相关概念的简单总结。。。
相关文章推荐
- View类通用模板(C#)
- C# 如何保证对象线程内唯一:数据槽(CallContext)
- 深入理解C#:从简单的数据类型开始
- VS2010 C# 调用Web Service .
- C#反射的坑
- c#中总是提示“在代码运行时或者在禁用“只要一个进程中断,就中断所有进程”选项时,不允许进行更改。
- C#绘制实时曲线
- C#之VS自带RDLC报表学习
- C# 获取打印机列表
- 初识C#总结篇(一)
- C#与USB设备通信
- C#控件缩写
- C#反射
- C# DateTimePicker控件如何精确设置显示时分秒
- C#第十三天
- C#简单的Aforge调用摄像头
- C#创建Excel
- C# 一步一步完成一个简单的计算器 第三步---实现双目运算
- C# FTP上传文件至服务器代码
- C# ftp 上传、下载、删除