随笔分类 - CLR学习笔记
记录我学CLR的过程和知识点
摘要:String对象可能包含一些敏感数据,比如用户密码等,如果允许执行一些不安全或者非托管的代码,这些代码就可以扫描进程的地址空间,找到包含敏感数据的字符串,并以一种非授权的方式来使用这些数据,即使String对象只是使用一小段时间,然后就会垃圾收集器收集,CLR也可能无法立即使用String对象的内存,致使String对象的字符长时间保留在进程的内存中,造成机密数据泄露...
阅读全文
摘要:由于String类型代表的是一个不可变的字符串,所以FCL提供了另一个名为System.Text.StringBuilder的类型,它允许我们有效的对字符串的字符执行动态操作,以创建一个String。从逻辑上说,StringBuilder对象中包含一个字段,它引用由Char结构构成的一个数组...
阅读全文
摘要:String对象是不可变的(immutable),也就是说,字符串在创建之后就不能再改变,使字符串不可变有几个好处,首先,它允许在一个字符串上执行各种操作,而不实际地改变字符串...
阅读全文
摘要:String类型是一个引用类型,直接派生自Object,因此String对象总是存在于堆上,而不是线程堆栈上。许多编程语言(包括C#)都将String视为一个基元类型,也就是说编译器允许在源代码中直接表示直接量字符串,编译器将这些直接量字符串放到模块的元数据中,并在运行时加载并引用它们...
阅读全文
摘要:以下按性能顺序列出了三种可实现方法(一)强制类型转换...(二)使用Convert类型...(三)使用IConvertible接口...
阅读全文
摘要:声明方法的参数类型时,应尽可能的指定最弱的类型,并且最好在基类上定义接口,例如,如果编写一个操作一组项目的方法,最好使用接口(如IEnumerable)来声明,而不是使用强数据类型(如List)或者强接口类型(如ICollection或Ilist)来声明...
阅读全文
摘要:为了将方法声明为可以接受可变数量参数的方法,我们可以使用params关键字来声明数组...
阅读全文
摘要:在默认的情况下,CLR假定所有的方法的参数都是按值传递的。对于值类型的实例,传递给方法的将是实例的副本,这意味着方法会得到一份属于自己的值类型实例的副本,调用者中的实例不会受到任何影响...
阅读全文
摘要:类型构造器也称为静态构造器,类构造器,实例构造器是用来初始化类型的实例的初始状态,类型构造器是用来初始化类型的初始状态。一个类型只能定义一个类型构造器,而且不能有参数...
阅读全文
摘要:值类型不像引用类型那样,必须要有构造器,所以编译器不会为值类型生成无参构造器。如下代码...
阅读全文
摘要:构造器是一种允许将类型实例初始化为有效状态的特殊方法,构造器方法在方法定义元数据表中被称为.ctor,创建引用类型的实例时,首先为实例的数据字段分配内存,接着初始化对象的系统开销字段(类型对象指针和同步块索引),最后调用类型的实例构造器设置对象的初始状态...
阅读全文
摘要:常量就是定义完以后就永远不会再改变的符号,它的值是在编译时必须确定的,编译通过后,编译器将常量的值保存在程序集的元数据中,定义常量将导致元数据的产生,常量只能是基元类型...字段是一种数据成员,存放着值类型的实例或者引用类型的引用...
阅读全文
摘要:静态类就是不需要进行实例化的类,定义类时用static修饰,例如Console,Math,Environment等,静态类只能有静态成员,静态类有以下特征...
阅读全文
摘要:装箱和拆箱的各种例子的说明和比较,能大大提高对装箱和拆箱的理解...
阅读全文
摘要:简单的说装箱是将值类型转换为引用类型;拆箱是将引用类型转换为值类型,但其内部是怎么实现的,CLR又是如何工作的呢,看下面代码...
阅读全文
摘要:CLR能按照它所选择的任何方式来排列类型的字段,可以指示是保持开发人员指定的顺序还是根据需要来重新排列,其目的是为了提高性能...
阅读全文
摘要:引用类型是从托管堆上分配的,C#的new操作符会返回对象的内存地址——也就是指向对象的内存地址,使用引用类型会对性能有一定的影响...值类型的实例通常是在线程堆栈上分配的,在代表值类型的一个变量中,并不包含一个指向实例的指针,变量中包含了实例本身的字段,在对值类型的实例操作时,不需要提领一个指针,值类型的实例不受垃圾回收器的制约...
阅读全文
摘要:C#编译器默认的是不进行益出检查(unchecked),因为益出检查会造成一定性能的损失...System.Decimal类型是一个非常特殊的类型,它对cheched和unchecked都失去效用...
阅读全文
摘要:介绍基元类型,FCL类型,CLS相容等,认识到string与String、object与Object、bool与Boolean等的区别...
阅读全文
摘要:堆上的所有对象都包含两个额外的成员:类型对象指针和同步块索引,可以看出,上面Manager对象和Employee对象都有这两个成员。在定义一个类型时,可以在类型的内部定义静态数据字段,为这些字段提供支援的字节是在类型对象自身中分配的。在每个类型对象中,最后都包含一个方法表,在方法表中,类型中定义的每个方法都有一个对应的记录项,前面已经讨论过这个方法表...
阅读全文

浙公网安备 33010602011771号