zoukankan      html  css  js  c++  java
  • 《CLR.via.C#第三版》第二部分第13章节 接口 读书笔记(七)

    这章的书写感觉很普通,是些基础的认知知识。

    其中一点的重要认知,泛型接口的好处(其实也是使用泛型的好处之一):编译时类型安全&处理值类型时减少装箱。

    再说点书上没有的。本来这些知识我打算另外分类在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方法。

    设计模式中“简单工厂模式”就是利用的向上转型这个原理。

    最后套用一句百科知识:

    接口回调和向上转型是设计模式的解耦核心,可以说几乎所有的模式都是建立在这两者的应用之上的。

  • 相关阅读:
    虚方法(virtual)和抽象方法(abstract)的区别
    IT社区
    C#中动态加载和卸载DLL
    应用程序体系结构
    Enterprise Architect 7.0入门教程
    jQuery插件开发基础1
    asp.net页面事件执行顺序
    codesmith4.1破解版
    在Web.config配置文件中自定义配置节点
    小巧实用的节拍器软件FineMetronome介绍 原创
  • 原文地址:https://www.cnblogs.com/hangwei/p/4094569.html
Copyright © 2011-2022 走看看