您的位置:首页 > 其它

【每天进步一点点】 .net概念

2016-09-26 20:58 169 查看
.net编译之后的程序集有二种存在形式:分别为.exe与.dll

一、Basic Class Library BCL基础类库

mscorlib.dll

二、框架类库 FCL

BCL是FCL的一个子集

三、CTS公共类型系统

四、即时编译 Just-In-time compilation

静态编译:在程序执行前全部被翻译为机器码;反之动态编译是一句句执行翻译,边运行变翻译

值类型与引用类型

(1)继承、均集成自System.Object类,不同之处,几乎所有的引用类型都是直接从System.Object直接继承,值类型则从System.Object的子类System.ValueType继承。

(2)内存分配 引用类型挡在托管堆上,托管栈将引用托管堆;值类型在运行时(托管栈)分配

引用类型如:string,Object,class等总是在从托管堆上分配的,C#中new操作符返回对象的内存地址–也就是指向对象数据的内存地址。

拆箱与装箱就是值类型与引用类型的转换,其是值类型和引用类型之间的桥梁。之所以可以这样转换是因为C#所有类型都源自Object(所有值类型都源于ValueType,而ValueType源于Object)。

注意字符串在修改时,是在堆上创建一个新的对象,然后将栈上的字符串指向新的对象(旧的对象变为垃圾等待GC回收)。字符串的值是无法被修改的(具有不变性)。考虑使用StringBuilder来防止建立过多对象,减轻GC压力。

字符串的不变性指的是字符串一经赋值,其值就不能被更改。当使用代码将字符串变量等于一个新的值时,堆上会出现一个新的字符串,然后栈上的变量指向该新字符串。没有任何办法更改原来字符串的值。

字符串驻留是CLR的JIT做代码优化时,CLR会维护一个字符串驻留池(内部哈希表),并在新建字符串时,探查是否已经有相同值的字符串存在。只有以下两种情况才会自动探查。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  .net