黑马程序员-枚举,数据类型-学习笔记

------- Windows Phone 7手机开发.Net培训、期待与您交流! -------
标志枚举的介绍:
举例:(QQ的状态,在线、隐身……)
例:
Public enum MyColor:byte
{
	White,
	Red,
	Green
}
1、枚举对应的都是一个常量值,所有编译的时候就会替换成对应的数值。
2、获取当前枚举的基础值类型:Enum.GetUnderlyingTye(typeof(MyColor))
3、byte,枚举基础类型可以是出了char以外的任何整型,准许使用的枚举类型又byte、sbyte、short、ushort、int、long、ulong。
4、将枚举转换为数值:(int)MyColor.Red;
5、将枚举转换为字符串:MyColor.Red.ToString();
6、将字符串转换为枚举:MyColor mc =(MyColor)Enum.Parse(typeof(MyColor),"Red");


标志枚举的介绍:
1、[Flags]加上这个特性后枚举类型.ToString()返回的就是文字形式,不是数字。
2、标志枚举是互斥的。
3、验证A枚举中是否具有其中一项。用A枚举与该项取“且(&)”,如果等于该项,说明有,反之没有。


结构体介绍:(结构是值类型,类是引用类型)
1、在没有面向对象、在没有类的情况下如果组织一些相关的数据,用结构体。
2、一种值类型,不具有面向对象的特征,通常用来封装小型相关变量(非常像类的量组)
3、System.Drawing.Point、Size、Color
4、注意事项:结构使用时可以new,也可以不new。如果不new,则使用前必须为结构成员赋值。(当结构中有属性,并且声明结构后需要使用到属性时,必须new),在结构中不能为变量直接赋初值,除非const、static
5、结构可以实现接口,但不能继续。
6、结构的使用方法和类很相似。
7、结构不能声明默认构造函数(没有参数的构造函数)或析构函数
8、结构可以声明带参数的构造函数
9、结构在赋值时进行赋值,将勾结赋值给新变量时,将复制所有数据,并且对新副本所做的任何修改不会更改原始副本的数据。
10、一个结构不能从另一个结构或继承,而且不能作为一个类的基。所有结构都直接继承自System.ValueType,后者继承自System.Object。


使用类还是结构的选择:
1、是否需要使用面向对象的特性:封装、继承、多态。如果需要在某些情况下被继承或使用多态等特性则只能用类
2、当类型中(类或结构)的成员比较多的时候,则考虑使用类。
3、使用结构时注意装箱、拆箱的性能差异。


类型转换的介绍:
1、隐式类型转换:
double num = 10;//sizeof(double)/sizeof(int)
2、显式类型转换:
int n =(int)num;


扩展知识:
byte:  1个字节
char:  2个字节
short: 2个字节
int:   4个字节
long:  8个字节
double:8个字节
bool: 1个字节(其实是1位,在c#中都用1字节表示)
把小的转换成大的,发生隐式转换。大的转小的,可能丢失精度,必须用显式强制转换。


3、在内存上没有交集的数据类型,也没有子父类关系,不能进行类型转换。
4、将任意类型转换成字符串:ToString()。如果要将一个类ToString(),默认会显式该类的完全限定名称。
5、将字符串转换成“数值类型”(int、float、double),Parse()转换失败报异常,TryParse()转换失败不报异常(推荐使用)。
6、实用as与直接类型转换:
if(p is Student){Student stu=(Student)p;}
CLR会进行两次类型检查if(检查一次){这里在检查一次}
通过GetType(),GetType()不允许重写。
Student stu = p as Student;//推荐实用as,效率高于前者,如果转换失败返回null,而不会报异常。
7、convert考虑数据意义的转换。Convert是一个加工、改造的过程,可以转换任意类型。


值类型和引用类型介绍:
1、值类型均隐式派生自System.ValueType
数值类型、bool、结构、枚举
查看IL,隐式继承自ValueType
2、引用类型派生自System.Object
字符串、数组、类、接口等
查看IL,隐式继承自Object
3、引用类型变量的赋值只复制对对象的引用。
4、值类型变量赋值会拷贝一个副本。
5、值传递:传递的是栈中的内容。
6、ref引用传递:传递的是栈本身的地址。
7、对于值类型来说:栈中存储的是直接使用的数据。对于引用类型来说:栈中存储的是堆中对象的地址。
8、参数传递的时候:
值传递,传递的是栈中保存的数据。
引用传递,传递的是栈本身的地址。


异常的介绍:
1、语法错误,一般编译器会提示错误。
2、逻辑错误,编译没问题,执行部报异常,原因是代码写错了。
3、在运行时发生的错误,叫异常,异常一般会导致程序崩溃。
4、用try{可能发生异常的代码}……catch{对异常的处理}……finally{无论是否发生异常,是否捕获异常都会执行这一段代码}
5、catch块默认捕获所有异常,catch (Exception ex)这种写法也可以捕获所有的异常,指定特殊类型异常,如catch (NullRefernceException ex),只能捕获指定类型的异常。
6、可以对多种异常分别捕获,该情况写多个catch块。


可变参数的介绍:
1、使用params关键字,参数为数组
2、参数可有可无。如果没有参数,意味参数为一个长度为0的数组参数
3、当一个方法中有多个参数时,并且还包含可变参数时,可变参数只能放在参数列表的最后。
4、可以为可变参数直接传递一个对应类型的数组。


ref和out的介绍:
ref:通过ref修饰的参数,在使用之前必须赋初值,否则报异常。
out:当一个方法同时要返回多个值的时候,可以考虑使用out参数,out参数,在方法中必须赋值,即便在传递out参数时,赋值了,在方法中也必须赋值,否则不能使用。


比较两个对象是否为同一个对象:Equals、==、object.ReferenceEquals
注意:由于Equals方法子类可以重写,所以通过Equals方法判断是否是同一个对象不准确,而==内部也是调用Equals,所以判断两个对象是否是同一个对象使用object.ReferenceEquals
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值