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

.NET框架包含BCL基础类库和FCL框架类库,BCL是FCL的一部分。介绍了CTS公共类型系统、即时编译机制及值类型与引用类型的差异。深入探讨了字符串的不变性和驻留特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.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会维护一个字符串驻留池(内部哈希表),并在新建字符串时,探查是否已经有相同值的字符串存在。只有以下两种情况才会自动探查。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值