2016年11月27日--面向对象:多态、类库、委托、is和as运算符、泛型集合
1、虚方法 virtual
重写 override
父类中的方法,在子类中并不适用,那么子类需要自主更改继承的方法或者是属性,那父类中加了virtual关键字的方法才可以被子类重写,子类重写父类的方法使用的是override关键字
例:
我们都知道,喜鹊(Magpie)、老鹰(Eagle)、企鹅(Penguin)都是属于鸟类,我们可以根据这三者的共有特性提取出鸟类(Bird)做为父类,喜鹊喜欢吃虫子,老鹰喜欢吃肉,企鹅喜欢吃鱼。
创建基类Bird如下,添加一个虚方法Eat():
/// <summary>
/// 鸟类:父类
/// </summary>
public class Bird
{
/// <summary>
/// 吃:虚方法
/// </summary>
public virtual void Eat()
{
Console.WriteLine("我是一只小小鸟,我喜欢吃虫子~");
}
}
Bird
创建子类Magpie如下,继承父类Bird,重写父类Bird中的虚方法Eat():
/// <summary>
/// 喜鹊:子类
/// </summary>
public class Magpie:Bird
{
/// <summary>
/// 重写父类中Eat方法
/// </summary>
public override void Eat()
{
Console.WriteLine("我是一只喜鹊,我喜欢吃虫子~");
}
}
Magpie
创建一个子类Eagle如下,继承父类Bird,重写父类Bird中的虚方法Eat():
/// <summary>
/// 老鹰:子类
/// </summary>
public class Eagle:Bird
{
/// <summary>
/// 重写父类中Eat方法
/// </summary>
public override void Eat()
{
Console.WriteLine("我是一只老鹰,我喜欢吃肉~");
}
}
Eagle
创建一个子类Penguin如下,继承父类Bird,重写父类Bird中的虚方法Eat():
/// <summary>
/// 企鹅:子类
/// </summary>
public class Penguin:Bird
{
/// <summary>
/// 重写父类中Eat方法
/// </summary>
public override void Eat()
{
Console.WriteLine("我是一只小企鹅,我喜欢吃鱼~");
}
}
Penguin
到此,一个基类,三个子类已经创建完毕,接下来我们在主函数中来看下多态是怎样体现的。
static void Main(string[] args)
{
//创建一个Bird基类数组,添加基类Bird对象,Magpie对象,Eagle对象,Penguin对象
Bird[] birds = {
new Bird(),
new Magpie(),
new Eagle(),
new Penguin()
};
//遍历一下birds数组
foreach (Bird bird in birds)
{
bird.Eat();
}
Console.ReadKey();
}
运行结果:

2、抽象类
是因为普通的多态虚方法没有人用本身的方法主体,那么...
抽象类就是来当亲爹,abstract
抽象类中可以有抽象方法:abstract
抽象方法一定在抽象类中,但是抽象类中不一定只有抽象方法,也可以有普通方法
例:
我们把Bird父类改成抽象类,Eat()方法改成抽象方法。代码如下:
/// <summary>
/// 鸟类:基类
/// </summary>
public abstract class Bird
{
/// <summary>
/// 吃:抽象方法
/// </summary>
public abstract void Eat();
}
Bird
抽象类Bird内添加一个Eat()抽象方法,没有方法体。也不能实例化。
其他类Magpie,Eagle,Penguin代码不变,子类也是用override关键字来重写父类中抽象方法。
Main主函数中Bird就不能创建对象了,代码稍微修改如下:
static void Main(string[] args)
{
//创建一个Bird基类数组,添加 Magpie对象,Eagle对象,Penguin对象
Bird[] birds = {
new Magpie(),
new Eagle(),
new Penguin()
};
//遍历一下birds数组
foreach (Bird bird in birds)
{
bird.Eat();
}
Console.ReadKey();
}
运行结果:

3、接口
接口就是出来做 干爹的,接口不是类 interface
编写方法格式: string 方法名();
实现接口的方法 不要override,直接正常编写就可以了
例:
添加一个接口IFlyable,代码如下:
/// <summary>
/// 飞 接口
/// </summary>
public interface IFlyable
{
void Fly();
}
IFlyable
喜鹊Magpie实现IFlyable接口,代码如下:
/// <summary>
/// 喜鹊:子类,实现IFlyable接口
/// </summary>
public class Magpie:Bird,IFlyable
{
/// <summary>
/// 重写父类Bird中Eat方法
/// </summary>
public override void Eat()
{
Console.WriteLine("我是一只喜鹊,我喜欢吃虫子~");
}
/// <summary>
/// 实现 IFlyable接口方法
/// </summary>
public void Fly()
{
Console.WriteLine("我是一只喜鹊,我可以飞哦~~");
}
}
Magpie
老鹰Eagle实现IFlyable接口,代码如下:
/// <summary>
/// 老鹰:子类实现飞接口
/// </summary>
public class Eagle:Bird,IFlyable
{
/// <summary>
/// 重写父类Bird中Eat方法
/// </summary>
public override void Eat()
{
Console.WriteLine("我是一只老鹰,我喜欢吃肉~");
}
/// <summary>
/// 实现 IFlyable接口方法
/// </summary>
public void Fly()
{
Console.WriteLine("我是一只老鹰,我可以飞哦~~");
}
}
Eagle
在Main主函数中,创建一个IFlyable接口数组,代码实现如下:
static void Main(string[] args)
{
//创建一个IFlyable接口数组,添加 Magpie对象,Eagle对象
IFlyable[] flys = {
new Magpie(),
new Eagle()
};
//遍历一下flys数组
foreach (IFlyable fly in flys)
{
fly.Fly();
}
Console.ReadKey();
}
执行结果:

拓展:链接
类库:
其实就是一堆类文件,只不过你看不到这些类的源代码,保密性好。
优点:保密性好
缺点:如果这个方法不好用,使用者无法自己去更改它。
委托:
委托可以理解为:函数的指针
关键词:delegate
声明:
public delegate int FirstDel(int a, int b);
创建委托变量:
FirstDel 名字 = 与这个委托类型相同的方法;
is和as运算符:
is : 判断某一个对象是否是某一种类型
对象 is 类型名 是这种类型返回 true 不是返回 false
as : 将某一个对象转换成某一种类型,如果转换不成功,那么会给这个对象赋一个null,不会抛出异常
泛型集合 List<T>
综合了集合与数组的优点,
固定数据类型,不限制长度的一种集合
2016年11月27日--面向对象:多态、类库、委托、is和as运算符、泛型集合的更多相关文章
- 2016年11月27日 星期日 --出埃及记 Exodus 20:18
2016年11月27日 星期日 --出埃及记 Exodus 20:18 When the people saw the thunder and lightning and heard the trum ...
- 2016年11月24日--面向对象、C#小复习
面对对象就是:把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象.对同类对象抽象出其共性,形成类.类中的大多数数据,只能用本类的方法进行处理.类通过一个简单的外部接口与外界发生关系,对象 ...
- 我的Python成长之路---第七天---Python基础(22)---2016年2月27日(晴)
socket网络编程 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ...
- 2016年12月27日 星期二 --出埃及记 Exodus 21:22
2016年12月27日 星期二 --出埃及记 Exodus 21:22 "If men who are fighting hit a pregnant woman and she gives ...
- 2016年11月30日 星期三 --出埃及记 Exodus 20:21
2016年11月30日 星期三 --出埃及记 Exodus 20:21 The people remained at a distance, while Moses approached the th ...
- 2016年11月29日 星期二 --出埃及记 Exodus 20:20
2016年11月29日 星期二 --出埃及记 Exodus 20:20 Moses said to the people, "Do not be afraid. God has come t ...
- 2016年11月28日 星期一 --出埃及记 Exodus 20:19
2016年11月28日 星期一 --出埃及记 Exodus 20:19 and said to Moses, "Speak to us yourself and we will listen ...
- 2016年11月26日 星期六 --出埃及记 Exodus 20:17
2016年11月26日 星期六 --出埃及记 Exodus 20:17 "You shall not covet your neighbor's house. You shall not c ...
- 2016年11月25日 星期五 --出埃及记 Exodus 20:16
2016年11月25日 星期五 --出埃及记 Exodus 20:16 "You shall not give false testimony against your neighbor.不 ...
随机推荐
- Django调用JS、CSS、图片等静态文件
zz 在下面的例子中,我们将media作为静态(CSS\JS\图片文件)文件的目录 方法一. 1.首先在settings.py文件中自定义参数 STATIC_PATH=’./media’ .(意为当前 ...
- 【转】【C#】C# 5.0 新特性——Async和Await使异步编程更简单
一.引言 在之前的C#基础知识系列文章中只介绍了从C#1.0到C#4.0中主要的特性,然而.NET 4.5 的推出,对于C#又有了新特性的增加--就是C#5.0中async和await两个关键字,这两 ...
- C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 忘记密码功能改进、手机短信、电子邮件
由于我们的系统接近有100000个用户账户,经常会有忘记密码的时候,用户多了,很小的一个功能,每天都会有很多人在用,每个功能都非常友善,会提高提系统的效率,提高用户体验. 一天最多能返回3次手机短信, ...
- XML中输入特殊符号
XML中输入特殊符号 周银辉 特殊符号比如 ™, 要在xml中使用的话, 其实和html的转码是一样的, 参考下面这个表(使用十进制编码那一列) 特殊符号 命名实体 十进制编码 特殊符号 命名实体 十 ...
- J2EE,J2SE,J2ME,JDK,SDK,JRE,JVM区别
转自:http://www.metsky.com/archives/547.html 一.J2EE.J2SE.J2ME区别 J2EE——全称Java 2 Enterprise Edition,是Jav ...
- 软件工程导论-目录-K-T+RJ大
目录 10 第1章 软件工程学概述/1 19 1.1 软件危机/1 19 1.1.1 软件危机的介绍/1 19 1.1.2 产生软件危机的原因/3 21 1.1.3 消除软件危机的途径/4 22 1. ...
- Log4j的ConversionPattern参数的格式含义
Log4j建议只使用四个级别,优先级从高到低分别是ERROR.WARN.INFO.DEBUG#这里定义能显示到的最低级别,若定义到INFO级别,则看不到DEBUG级别的信息了~!log4j.rootL ...
- C# 与 SQLite的操作
1.通过Add References引用SQLite ADO .NET安装目录的bin目录下的System.Data.SQLite.DLL. 2.创建数据库文件:因为始终是个0字节文件,应该利用IO也 ...
- oneThink后台添加插件步骤详解
内容管理框架:oneThink 版本:V1.1.141212 (注:v1.1也有很多版本,一不小心就下到V1.1.140202 去了,还有其他版本,建议去代码托管平台下载最新版本) 我也不偷懒,把每一 ...
- php基础知识整理
记录一些php容易忽略的基础知识点 include和require的区别 require和include都表示引入指定文件,主要区别有几点 1.加载失败处理方式不同 include在引入不存文件时产 ...