随笔分类 -  CLR via C#

摘要:Q1: 类中的实例构造函数可否被继承?A1: 实例构造函数永远不能被继承。Q2: 抽象类可否包含有参实例构造函数,如果可以,何时会被调用?A2: 可以。抽象类有参构造函数通过其子实体类的构造函数调用,且若该抽象类没有提供无参构造函数,其子实体类必须显式调用一个它的有参构造函数,否则编译器会报错。代码如下:View Code 1 abstract class AbstractClass 2 { 3 public int Id { get; set; } 4 public AbstractClass(int id) 5 { 6 ... 阅读全文
posted @ 2013-04-30 14:33 Allen Li 阅读(1573) 评论(1) 推荐(3)
摘要:Q1: const和readonly的区别是什么?A1: const: const用来声明常量。1)它的值必须在编译时确定;2)编译器将常量的值保存在程序集的元数据中;3)常量的值直接嵌入代码,运行时不需要为常量分配内存空间;4)长两宗被视为静态成员;5)用const声明的类型必须是基元类型; readonly: 用来声明只读字段。1)只读字段只能在一个构造函数中写入;2)可以用反射来修改readonly字段;3)当只读字段为引用类型,不可改变的是引用,并非字段引用的对象。Q2: 静态字段和实例字段内存空间在什么时候分配?A2: 静态字段的内存空间在类型对象中分配,类型对象是在类型加载到一个A 阅读全文
posted @ 2013-04-11 21:23 Allen Li 阅读(1515) 评论(6) 推荐(2)
摘要:Q1:类型中可以定义哪些成员?A1:1)常量;2)字段;3)实例构造函数;4)静态构造函数;5)方法;6)属性;7)事件;8)类型;9)操作符重载;10)转换操作符重载。Q2:什么是友元程序集,如何创建友元程序集,它的劣势是什么?A2:程序集A中定义的类型希望程序集B访问,又不希望其他程序集访问,即不能定义为internal或public,此时,可以用友元程序集解决。在构建程序集时,可以使用在System.Runtime.CompilerServices命名空间中定义的一个名为InternalsVisibleTo的特性来标明它认为是“友元”的其他程序集,测试一下:1)创建一个ClassLibr 阅读全文
posted @ 2013-04-08 23:55 Allen Li 阅读(1800) 评论(2) 推荐(7)
摘要:Q1: 一个值类型调用System.Object类定义的方法会不会发生装箱?A1: 如果值类型重写了System.Object定义的虚方法(Equals, GetHashCode, ToString),调用时不会发生装箱,如果重写的方法中调用了基类的实现,则需要进行装箱;如果值类型调用了非虚方法(GetType, MemberwiseClone),则会发生装箱。Q2: 为什么重写Equals方法需要同时重写GetHashCode方法?A2: GetHashCode方法可以获取任意对象的Int32哈希码,System.Collections.HashTable类型,System.Generic. 阅读全文
posted @ 2013-04-04 15:36 Allen Li 阅读(1325) 评论(2) 推荐(2)
摘要:Q1: 什么是基元类型?C#中有哪些基元类型?A1: 编译器能直接支持的数据类型称为基元类型,基元类型直接映射到FCL中存在的类型,比如C#中int映射到System.Int32类型。C#中的基元类型:我们可以定义这样定义一个字符串:String str = "abc";也可以这样定义一个字符串:string str = "abc";它们生成的IL是完全相同的,string可以被C#编译器直接映射到FCL中的System.String类型,换言之,C#编译器自动假定所有的源代码中都添加了这个命令:using string = System.String; 阅读全文
posted @ 2013-04-02 23:38 Allen Li 阅读(1916) 评论(16) 推荐(8)
摘要:Q1: Object类型包含哪些方法?A1: Object类型共包含6个方法,Equals, GetHashCode, ToString, GetType, MemberwiseClone和Finalize.Q2: new一个对象的过程是什么?A2: 1)计算对象所需字节数,包括该类型及其基类型定义的所有实例字段所需的字节数和类型对象指针、同步块索引所需字节数,类型指针和同步块索引是CLR用来管理对象的;2)在托管堆上分配该对象所需内存空间;3)初始化类型对象指针和同步块索引;4)执行构造函数。大多数编译器都在构造函数中自动生成一段代码调用基类构造函数,每个类型的构造函数在执行时都会初始化该类 阅读全文
posted @ 2013-04-01 23:04 Allen Li 阅读(1926) 评论(8) 推荐(5)
摘要:Q1: 什么事CLR?A1: CLR (Common Language Runtime) 是一个可以由多种编程语言使用的“运行时”。Q2: CLR的核心功能有哪些?A2: 1)内存管理;2)程序集加载;3)安全性;4)异常处理;5)线程同步Q3: CLR与使用的编程语言有关吗?A3: 无关。只要编译器是面向CLR的就行。Q4: 选用不同编程语言经过面向CLR的编译器编译后生成的结果相同吗?A4: 相同。无论选择什么语言,相应的编译器变异的结果都是一个托管模块,即一个标准的32位PE (Portable Executable) 32文件或64位PE32+文件。它们都需要CLR才能执行。Q5: 托 阅读全文
posted @ 2013-03-27 17:22 Allen Li 阅读(2086) 评论(4) 推荐(6)