《CLR.via.C#第三版》第二部分第13章节 接口 读书笔记(七)
2014-11-13 11:53
281 查看
这章的书写感觉很普通,是些基础的认知知识。
其中一点的重要认知,泛型接口的好处(其实也是使用泛型的好处之一):编译时类型安全&处理值类型时减少装箱。
再说点书上没有的。本来这些知识我打算另外分类在C#基础里讲的,这里先单独表述下。
到现在为止,我突然发现,很多编程的基础概念,于面向对象编程的语言来说,都是通用的,但是抱歉,在C#里(相关书籍)居然没有!但我相信你翻阅Java书籍就有很大几率看到这些概念的详尽解释。
还好我也学过Java。
直到现在,我鲜少在C#书籍中看到"接口回调"这一概念。这对于一开始就接触C#的初学者来说,如果很多编程基础概念不讲,真的很难理解一些对象的行为。
我开始怀疑C#书籍的编写者都是站在怎样的高度。
接口回调也是多态的体现。
首先用一段代码来示例接口回调:
接口IMyInterface1的代码如下:
类MyClass1,实现接口IMyInterface1,代码(省略命名空间)如下:
Main方法中的代码(接口回调):
输出:
如上图所示,接口变量i调用Method1方法,实际调用的是子类MyClass1中的Method1方法。
这就是接口回调。由接口回调会引出另一个类似概念:
现假定父类子类都有自己的myMethod方法,
调用f.myMethod();如果父类中myMethod是虚方法,那么调用的是子类的myMethod(子类必须使用override重写的情况),如果父类的myMethod非虚方法,则f.myMethod将调用自己内部的myMethod方法。
设计模式中“简单工厂模式”就是利用的向上转型这个原理。
最后套用一句百科知识:
接口回调和向上转型是设计模式的解耦核心,可以说几乎所有的模式都是建立在这两者的应用之上的。
其中一点的重要认知,泛型接口的好处(其实也是使用泛型的好处之一):编译时类型安全&处理值类型时减少装箱。
再说点书上没有的。本来这些知识我打算另外分类在C#基础里讲的,这里先单独表述下。
接口回调
其实我想不通为什么这本书不讲一下接口回调这个概念,我可不会相信接口回调只在java中用到。到现在为止,我突然发现,很多编程的基础概念,于面向对象编程的语言来说,都是通用的,但是抱歉,在C#里(相关书籍)居然没有!但我相信你翻阅Java书籍就有很大几率看到这些概念的详尽解释。
还好我也学过Java。
直到现在,我鲜少在C#书籍中看到"接口回调"这一概念。这对于一开始就接触C#的初学者来说,如果很多编程基础概念不讲,真的很难理解一些对象的行为。
我开始怀疑C#书籍的编写者都是站在怎样的高度。
接口回调也是多态的体现。
首先用一段代码来示例接口回调:
接口IMyInterface1的代码如下:
namespace CATest101 { interface IMyInterface1 { void Method1(); } }
类MyClass1,实现接口IMyInterface1,代码(省略命名空间)如下:
public class MyClass1:IMyInterface1 { public void Method1() { Console.WriteLine("MyClass1中的方法:Method1()"); } }
Main方法中的代码(接口回调):
static void Main(string[] args) { MyClass1 my = new MyClass1(); IMyInterface1 i = my;//声明接口类型指针指向MyClass1的实例对象 i.Method1(); Console.ReadLine(); }
输出:
如上图所示,接口变量i调用Method1方法,实际调用的是子类MyClass1中的Method1方法。
这就是接口回调。由接口回调会引出另一个类似概念:
向上转型
向上转型即是:父类引用指向子类对象,即类似Father f = new Child();的代码表述形式。现假定父类子类都有自己的myMethod方法,
调用f.myMethod();如果父类中myMethod是虚方法,那么调用的是子类的myMethod(子类必须使用override重写的情况),如果父类的myMethod非虚方法,则f.myMethod将调用自己内部的myMethod方法。
设计模式中“简单工厂模式”就是利用的向上转型这个原理。
最后套用一句百科知识:
接口回调和向上转型是设计模式的解耦核心,可以说几乎所有的模式都是建立在这两者的应用之上的。
相关文章推荐
- 《CLR.via.C#第三版》第二部分第4,5章节读书笔记(二)
- 《CLR.via.C#第三版》第二部分第12章节 泛型 读书笔记(六)
- 《CLR.via.C#第三版》第二部分第8,9章节读书笔记(四)
- 第二部分 MediaPlayer的接口与架
- 《视频解密》中文版(第四版) 第六章 数字视频接口(第二部分)
- Essential .NET 读书笔记 [第二部分]
- 《C++捷径教程》读书笔记--Chapter 11--类(第二部分)
- 【读书笔记】软件工程·实践者的研究方法第7版 第二部分 建模 第4章 指导实践的原则
- 读书笔记-HBase in Action-第二部分Advanced concepts-(1)HBase table design
- 《CLR.via.C#第三版》第二部分第10,11章节读书笔记(五)
- 《C++捷径教程》读书笔记--Chapter 5--数组和字符串(第二部分)
- 【读书笔记】软件工程·实践者的研究方法第7版 第二部分 建模 第5章 理解需求
- Netty in Action (十六) 第六章节 第二部分 ChannelHandlerContext和异常处理
- 《CLR.via.C#第三版》第二部分第6,7章节读书笔记(三)
- 第二部分 MediaPlayer的接口与架构
- 算法导论-第二部分-读书笔记
- 《Pro Ogre 3D Programming》读书笔记 之 第十章 布告板与粒子 第二部分 (转)
- 阅读《代码大全》后的读书笔记(第二部分)
- 代码大全第二版读书笔记 第二部分-创建高质量的代码 五、软件构建中的设计
- 代码大全第二版读书笔记 第二部分-创建高质量的代码 六、可以工作的类