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

6370

被折叠的 条评论
为什么被折叠?



