这章的书写感觉很普通,是些基础的认知知识。
其中一点的重要认知,泛型接口的好处(其实也是使用泛型的好处之一):编译时类型安全&处理值类型时减少装箱。
再说点书上没有的。本来这些知识我打算另外分类在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方法。
设计模式中“简单工厂模式”就是利用的向上转型这个原理。
最后套用一句百科知识:
接口回调和向上转型是设计模式的解耦核心,可以说几乎所有的模式都是建立在这两者的应用之上的。