摘要: 本章要讨论回调函数。回调函数是一种非常有用的编程机制,它的存在已经有很多年了。 Microsoft .Net Framework通过委托(delegate)来提供了一种回调函数机制。 列如:委托确保回调方法是类型安全的。委托还允许顺序调用多个方法,并支持调用静态方法和实例方法。 C#中委托是在程序运 阅读全文
posted @ 2016-06-26 18:09 Chris_在IT道路上前行 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 数组(Array)是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。 数组中某个指定的元素是通过索引来访问的。 所有的数组都是由连续的内存位置组成的。最低的地址对应第一个元素,最高的地址对应最后一个元素。 声明数组 在你的应用程序的变量或字段 阅读全文
posted @ 2016-06-26 18:08 Chris_在IT道路上前行 阅读(202) 评论(0) 推荐(0) 编辑
摘要: Enumeration提供了一些非常炫酷的功能,相信大多数开发人员都不熟悉。这些新功能极大的简化了应用程序开发。 15.1枚举类型 枚举类型(enumerated types)定义了一组“符号名称/值”配对。 以下Color类型定义了一组符号,每个符号都标识一种颜色: internal enum C 阅读全文
posted @ 2016-06-26 18:07 Chris_在IT道路上前行 阅读(317) 评论(0) 推荐(0) 编辑
摘要: 14.1字符 在.Net Framework中,字符总是表示成16位Unicode代码值,这简化了国际化应用程序的开发。 每个字符都表示成System.Char结构的一个实例。 针对Char的一个实例,可以调用静态GetUnicodeCategory方法,这个方法返回的是System.Globali 阅读全文
posted @ 2016-06-26 18:06 Chris_在IT道路上前行 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 多继承(multiple inheritance)是指一个类从两个或多个基类派生的能力。 CLR不支持多继承,CLR只是通过接口提供了“缩水版”的多继承。 实现接口的类或结构必须实现接口定义中指定的接口成员。 interface IEquatable<T> { bool Equals(T obj); 阅读全文
posted @ 2016-06-26 18:05 Chris_在IT道路上前行 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 泛型(generic)是CLR和编程语言提供的一种特殊机制,它支持另一种形式的代码重用,即算法重用。 简单的说,开发人员先定义好一个算法,比如排序、搜索、交换、比较或者转换等。但是,定义算法的开发人员并不设定该算法要操作什么数据类型。该算法可以广泛地应用于不同类型的对象。然后,另一个开发人员,只有指 阅读全文
posted @ 2016-06-26 18:04 Chris_在IT道路上前行 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 如果类型定义了事件成员,那么类型就可以通知其他对象发生了特定的事情。 例如,Button类提供了一个名为Click的事件。应用程序中的一个或多个对象可能想接收关于这个事件的通知,以便在Button被单击后采取某些操作。事件是实现这种交互的类型成员。 具体的说,如果定义一个事件成员,意味着类型要提供以 阅读全文
posted @ 2016-06-26 18:03 Chris_在IT道路上前行 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 属性允许源代码用一个简化的语法来调用一个方法。 CLR支持两种属性:无参属性 (parameterless property) ,有参属性(parameterful property) C#中将有参属性称为索引器(indexer) 10.1无参属性 一般用类型的字段成员来实现获取或改变类型的状态信息 阅读全文
posted @ 2016-06-26 18:03 Chris_在IT道路上前行 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 9.1可选参数和命名参数 设计一个方法的参数时,可为部分或全部参数分配默认值。然后,调用这些方法的代码可以选择不指定部分实参,接受其默认值。 除此之外,调用方法时,还可通过指定参数名称的方式为其传递实参。 以下代码演示了可选参数和命名参数的用法: public static class Progra 阅读全文
posted @ 2016-06-26 18:02 Chris_在IT道路上前行 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 8.1实例构造器和类(引用类型) 构造器(constructor)是允许将类型的实例初始化为良好状态的一种特殊方法。 编译后,构造器方法在“方法定义元数据表”中始终叫.ctor。 创建一个引用类型的实例,首先为实例的数据字段分配内存,然后初始化对象的附加字段(类型对象指针和同步块索引),最后调用类型 阅读全文
posted @ 2016-06-26 18:01 Chris_在IT道路上前行 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 7.1常量 常量(constant)常量是在编译时已知并在程序的生存期内不发生改变的不可变值。常量使用const修饰符进行声明。常量只能在声明中初始化。定义常量符号时,它的值必须在编译时确定。 常数表达式是在编译时可被完全计算的表达式。因此不能从一个变量中提取的值来初始化常量。 如果 const i 阅读全文
posted @ 2016-06-26 17:56 Chris_在IT道路上前行 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 6.1类型的各种成员 在一个类型中可以定义0个或多个以下种类的成员: 常量:是指出数据值恒定不变的一个符号。这些符号通常用于使代码更容易阅读和维护。常量通常与类型关联,不与类型的实例关联。从逻辑上讲,常量始终是静态成员。常量就是一个符号,编译时编译器就会将该符号替换成实际值。 字段:字段表示一个只读 阅读全文
posted @ 2016-06-26 17:55 Chris_在IT道路上前行 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 5.1基元类型 编译器(Compiler)直接支持的数据类型称为基元类型(primitive type)。 所有基元类型可以直接映射到FCL(Framework class library)中存在的类型。 比如C#中int直接映射到System.Int32类型,且在编译为IL(中间语言)时,他们将会 阅读全文
posted @ 2016-06-26 17:53 Chris_在IT道路上前行 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 4.1 所有类型都从System.Object派生 CLR要求每个类型最终都从System.Object 类型派生,所以可以保证每个类型的每个对象都有一组最基本的方法。 重写(override):继承时发生,在子类中重新定义父类中的方法,子类中的方法和父类的方法是一样的(即方法名,参数,返回值类型都 阅读全文
posted @ 2016-06-26 17:50 Chris_在IT道路上前行 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 什么是序列化和反序列化 序列化(serialization)是将一个对象或者对象图(对象在特定的时间点的一个视图)转换成一个字节流的过程。反序列化(deserialization)是将一个字节流转换回对象图的过程。 应用场景: 应用程序的状态(对象图)可以保存到磁盘文件或数据库中,并在应用程序下次运 阅读全文
posted @ 2016-06-26 17:40 Chris_在IT道路上前行 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 程序集加载和反射,实现了在编译时对一个类型一无所知的情况下,如何在运行时发现类型的信息,创建类型的实例以及访问类型的成员。显现的功能以及效果是十分强大的,比如使用第三方提供的程序集,以及创建动态可扩展应用程序。 23.1 程序集加载 JIT编译器在将方法的IL代码编译成本地代码时,会查看IL代码中引 阅读全文
posted @ 2016-06-26 17:05 Chris_在IT道路上前行 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 执行现场,加上代码,就是一个执行中的程序,称为进程。 线程是CPU的基本调度单位。参考文章:进程与线程的一个简单解释 1 进程(Process) 1.1 四个基本特征 进程由操作系统创建、管理的,离开了操作系统也就不谈什么进程了,先看看操作系统的四个基本特征: 并发(concurrence) 并行性 阅读全文
posted @ 2016-06-26 14:34 Chris_在IT道路上前行 阅读(362) 评论(0) 推荐(0) 编辑
摘要: 22.1 CLR寄宿 CLR Hosting(CLR 宿主)的概念:初始启动.Net Application时,Windows进程的执行和初始化跟传统的Win32程序是一样的,执行的还是非托管代码,只不过由于PE文件中引入了CLR Header,OS进程加载了mscoree.dll,从而启动了CLR 阅读全文
posted @ 2016-06-26 13:13 Chris_在IT道路上前行 阅读(328) 评论(1) 推荐(1) 编辑