c#抽象类和接口的简单举例
2015-06-01 22:44
281 查看
1. 个性大于共性。
2. 差异较大的个性间具有某些相同的行为。
3. 相同行为的实现方式有较大区别。
给你三个对象,分别是鲫鱼、鲤鱼、金鱼,仍然让你设计基类来概括它们之间的联系,那么你第一个意识到的肯定是它们都属于鱼类,其次是他们游泳的方式可能稍有差异,这时就应当使用抽象基类而不是接口,对比着上面的例子,原因有三条:
1. 共性大于个性 2. 共性相同的个体间必然具有相同的属性与行为 3. 相同行为的实现方式具有一定区别
观 察在使用接口或是使用抽象基类的几条理由中,第三条理由其实是一样的,它所描述的是面向对象中多态的概念,即通过覆盖父类的方法来实现,在运行时根据传递 的对象引用,来调用相应的方法。第二条理由开始产生分歧,接口更加强调了继承对象间具有相同的行为,而抽象类同时还强调了继承对象间具有相同的属性。而真 正将接口与抽象基类区分开的则是理由 一,归纳如下: 当在差异较大的对象间寻求功能上的共性时,使用接口。 当在共性较多的对象间寻求功能上的差异时,使用抽象基类。
2. 差异较大的个性间具有某些相同的行为。
3. 相同行为的实现方式有较大区别。
给你三个对象,分别是鲫鱼、鲤鱼、金鱼,仍然让你设计基类来概括它们之间的联系,那么你第一个意识到的肯定是它们都属于鱼类,其次是他们游泳的方式可能稍有差异,这时就应当使用抽象基类而不是接口,对比着上面的例子,原因有三条:
interface ISwim { void Swim(); } public class Person : ISwim { public void Swim() { //Swimming in person's style. } } public class Frog : ISwim { public void Swim() { //Swimming in frog's style. } } public class Fish : ISwim { public void Swim() { //Swimming in fish's style. } }
1. 共性大于个性 2. 共性相同的个体间必然具有相同的属性与行为 3. 相同行为的实现方式具有一定区别
abstract public class Fish { abstract public void Swim(); } public class 鲫鱼 : Fish { public override void Swim() { //Swim like a 鲫鱼 } } public class 鲤鱼 : Fish { public override void Swim() { //Swim like a 鲤鱼 } } public class 金鱼 : Fish { public override void Swim() { //Swim like a 金鱼 } }
观 察在使用接口或是使用抽象基类的几条理由中,第三条理由其实是一样的,它所描述的是面向对象中多态的概念,即通过覆盖父类的方法来实现,在运行时根据传递 的对象引用,来调用相应的方法。第二条理由开始产生分歧,接口更加强调了继承对象间具有相同的行为,而抽象类同时还强调了继承对象间具有相同的属性。而真 正将接口与抽象基类区分开的则是理由 一,归纳如下: 当在差异较大的对象间寻求功能上的共性时,使用接口。 当在共性较多的对象间寻求功能上的差异时,使用抽象基类。
相关文章推荐
- C# 发送邮件
- C#值类型
- C#简单一句代码,实现pictureBox的照片另存为磁盘文件不出错
- C#验证码
- C# 将Excel转xml
- C#Graphics画图
- C#第五次作业:开源项目“网页正文提取”的理解
- [工具-005] C#如何绑定HotKey
- C#泛型-使用委托的Sort排序方法
- C# 加密解密(DES,3DES,MD5,Base64) 类
- C# 导出标准格式的Excel 可用迅雷下载
- C# 获取客户端IP
- C# 获取系统当前时间 长格式
- C# 字符串截取
- C#正则表达式语法规则详解
- c#自定义类型的转换方式operator,以及implicit(隐式)和explicit (显示)声明的区别
- C# 操作XML 如果不存在创建 存在直接追加
- C# treeview右键菜单 设置技巧
- C# Invoke
- C# 根据时间创建文件夹