【学习笔记】《Microsoft .Net 框架程序设计》学习笔记2

本文探讨了C#编程中的关键概念,包括类型转换、命名空间别名使用、数据类型特性、溢出检查、引用类型与值类型的差异、装箱与拆箱过程以及console.writeLine()的性能考量。

1. as用于类型转换时需要配合if判断转换后是否为空。as进行类型转换时如果不兼容,返回NULL,如果兼容即转换成功,返回引用地址

type1 a=a as type1;
if(a != null)
{
}

2. 使用命名空间别名

using a=System.IO;


3. 数据类型

基元类型:编译器直接支持的类型,如int。int a=0;

 

4. 溢出检查:使用check 和 unchecked 操作符和溢出检查块

byte b=100;

b=checked(byte)(b+200);  //会抛出异常

checked

{

byte b=100;

b=(byte)(b+200);  //会抛出异常

}

默认情况下为unchecked

 

5. 引用类型和值类型

引用类型:内存从内存托管堆中分配,new返回的是对象在托管堆中的内存地址,性能没有值类型好

值类型:轻量级类型,分配在线程的堆栈上,不存在垃圾回收

任何“类”都是引用类型,结构、枚举为值类型,所有的值类型都继承自System.ValueType

ex:

class a{ int x;}//引用类型

struct b{int x;}//值类型

a a1=new a();//分配在托管堆上

b b1=new b();//也可以直接用b b1;区别是前者直接初始化里面的数据为0

a1.x=5;//解析地址并修改

b1.x=5;//直接在堆栈上修改

a a2=a1;//仅拷贝引用;

a2=9; //a1和a2都变成9

b b2=b1;//先分配堆栈,然后拷贝值

b2=9;//b1=5,b2=9

频繁传递时用引用类型,读数据什么的用值类型性能比较好!

 

6. 装箱和拆箱

a. 装箱:值类型->引用类型

步骤:1先为新生成的引用类型分配内存

            2值类型的字段拷到内存中

            3返回新分配的对象的地址

b. 拆箱:引用类型->值类型

步骤:1引用为NULL,抛异常NullReferenceException

            2拆后的类型不兼容,抛异常InValidCastException

            3其他情况下:获取托管堆中字段的地址,将值拷贝到堆栈中

注意:拆箱的性能损耗比装箱小的多,但都影响性能

 

7.console.writeLine()的性能

int a=5;

object b=a;

console.writeLine(a+(int)b);//性能差

console.writeLine(a+b);//性能好些
console.writeLine(a.tostring()+b);//性能更好

原因:console是先将其中+分隔的东西如果是值类型先装箱,然后调用其ToString方法



 

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值