随笔分类 -  CLR via C#学习笔记

摘要:8.5 转换操作符方法 有时需要将对象从一种类型转换为另一种类型。当源类型和目标类型都是编译器识别的基元类型时,编译器自己就知道如何生成转换对象所需的代码。 如果二者中有不是基元类型的,编译器会生成代码,要求CLR执行转换(强制转型)。这种情况下,CLR只是检查源对象的类型和目标类型是不是相同。 但 阅读全文
posted @ 2018-10-13 13:38 TKhaos 阅读(216) 评论(0) 推荐(0)
摘要:8.4 操作符重载方法 有的语言允许类型定义操作符应该如何操作类型到实例。例如,许多类型比如System.String都重载了相等==和不等!=操作符。 CLR对操作符重载一无所知,他甚至不知道什么是操作符。是编程语言定义了每个操作符的含义,以及这些特殊符号出现时应该生成什么样的代码。 例如在C#中 阅读全文
posted @ 2018-10-12 21:24 TKhaos 阅读(284) 评论(0) 推荐(0)
摘要:类型构造器 除了实例构造器,CLR还支持类型构造器,也称为静态构造器、类构造器或者类型初始化构造器。类型构造器可应用于引用类型和值类型。 实例构造器的作用是设置类型的实例的初始状态。对应地,类型构造器的作用是设置类型的初始状态。 类型默认没有类型构造器 如果定义也只能定义一个,此外类型构造器永远没有 阅读全文
posted @ 2018-10-11 13:32 TKhaos 阅读(228) 评论(0) 推荐(0)
摘要:类的实例构造器 构造器是将类型的实例化为良好状态的特殊方法。 创建引用类型的实例 首先会为实例的数据字段分配内存。 然后初始化对象的附加字段(类型对象指针和同步块索引)。 最后调用类型的实例构造器来设置对象的初始状态。 构造器初始化字段为0或null 构造引用类型的对象时,在调用类型的实例构造器之前 阅读全文
posted @ 2018-10-10 20:17 TKhaos 阅读(272) 评论(0) 推荐(0)
摘要:CLR调用方法 方法代表在类型或类型的实例上执行某些操作的代码。 在类型上执行操作,称为静态方法;在类型的实例上执行操作,称为非静态方法。所有方法都有名称、签名和返回类型。 在判断方法的唯一性时,除了方法名之外都只以参数为准,方法返回类型会被忽略。 不过C#在定义转换操作符方法时实际放宽了这个操作。 阅读全文
posted @ 2018-10-08 20:54 TKhaos 阅读(860) 评论(0) 推荐(0)
摘要:类型的各种成员 类型的成员有:常量、字段、实例构造器、类型构造器、方法、操作符重载、转换操作符、属性、事件、类型 以下C#代码展示了一个类型定义,其中包含所有可能的成员。 类型的可见性 定义文件范围的类型时,可将类型的可见性指定为public或internal。 public类型不仅对定义程序集中的 阅读全文
posted @ 2018-10-06 23:18 TKhaos 阅读(350) 评论(0) 推荐(0)
摘要:基元类型与FCL类型 编译器直接支持的数据类型称为基元类型。基元类型直接映射到Framework类库(FCL)中存在的类型。例如C#的int直接映射到System.Int32类型。 从另一个角度,可以认为C#编译器自动假定所有源代码文件都添加了以下using指令 基元类型相互转换 虽然int和flo 阅读全文
posted @ 2018-10-04 20:32 TKhaos 阅读(204) 评论(0) 推荐(0)
摘要:运行时的相互关系 首先从一些计算机基础知识开始。 创建线程栈 加载CLR的一个Windows进程,进程中可能有多个线程。线程创建时会分到1MB的栈。 栈空间用于向方法传递实参,方法内部定义的局部变量也在栈上。栈从高位内存地址向地位地址构建。 图中线程已执行了一些代码,栈上已经有一些数据了,现在假定线 阅读全文
posted @ 2018-10-04 17:40 TKhaos 阅读(1472) 评论(0) 推荐(0)
摘要:一、所有类型都从System.Object派生 运行时要求每个类型最终都从System.Object类型派生,也就是说,以下两个类型定义完全一样 System.Object类提供了如下所示的公共实例方法,所以每个类型的每个对象都保证了一组最基本的方法。 二、实例化对象时new操作符所做的事情 ①计算 阅读全文
posted @ 2018-10-03 23:26 TKhaos 阅读(307) 评论(0) 推荐(0)