51Testing软件测试网
ar
J.O$j*G.gp0y,R K下面的代码是取自<<c#100例>>,讲的是c#中的类型转换,复杂的数据类型(结构和枚举,数组没有讲),我在代码中加入了一些关于这些知识的注释(参考<<c#入门经典>>)
cI(f"wY$X{;pv051Testing软件测试网G&W3x6vU7]![1_using System;51Testing软件测试网5Kw"}V(m/H%Dl9|6S
51Testing软件测试网9V H5G rx5nk!{x:Inamespace CValueApp51Testing软件测试网'}'v+L
Y O!a/A%?3{Za
{
J+me3|&So0 /// <summary>
B?'O1A K(}~w0 /// Class1 的摘要说明。
N"uqc
C.QS2f"y0 /// </summary>
3jJ7]{!Rd0 class Class151Testing软件测试网9W?3\E@8AS!z
{51Testing软件测试网4D~;S0v8?)g
o.l
/// <summary>51Testing软件测试网D Aa9Ef
/// 应用程序的主入口点。51Testing软件测试网+[9f3u#h0P9W
/// </summary>51Testing软件测试网(V9d,ND \E b6z
[STAThread]51Testing软件测试网[$db1a*l-Pv
static void Main(string[] args)51Testing软件测试网/V+{\ s@1H
{
!dq'[C;Y$P0 //51Testing软件测试网7L;St8R _
// TODO: 在此处添加代码以启动应用程序
5C&\$H
fu\0 //51Testing软件测试网5rK2w5X;Mz3N|b"W
Q#J9L7Q)m0 //值类型定义及初始化
v|(X|5g6y,H+DBR0 System.Int16 aShort = new System.Int16 ();//System.Int16 等同与 short关键字
)y;h X,C6xK6|0 byte aByte = new Byte ();51Testing软件测试网(rg,x.ih+r8gU?
decimal aDecimal = 100.5m;
&[5i(a(qyC9o^b0 char aChar = 'y';
!rp'b)p,~)S-z0 Console.WriteLine ("值类型的初始化值:{0} ,{1} ,{2} ,{3}",aShort,aByte,aDecimal,aChar);51Testing软件测试网Z6W%^*LT
51Testing软件测试网~bS4xy ry%Y
y9~8n //值类型的赋值与操作
_ P%|0`Y1yC:J0 float aFloat = 123.123F;51Testing软件测试网8RA)s1U ~ Twd
bool aBool = ((aFloat > 121) && (aFloat < 125));
y1ZB2Y*@6t*K2E0 if (aBool) {
.cD7FC{ N0 int aInteger;51Testing软件测试网T(W3Tf.]#wB-O
p.u
aInteger = (int) aFloat;//显示转换
gn_$T{V0 /*51Testing软件测试网 S(I%{/uSN(?
显示转换的格式:
8r?p}p0 类型B 变量B;51Testing软件测试网w ok2F'qR;q2P
类型A 变量A;51Testing软件测试网c6c mh9[7TLP(^
变量B = (类型B)变量A51Testing软件测试网:zx_0ZWX-M@Gn
显示转换的相关问题:51Testing软件测试网1ujf%F3Lq
1) 在试图把一个值转换为一个不合适的值时,会造成数据丢失,这时可以使用关键字checked和unchecked(表达式的溢出检查环境),
dz@'p.i,P4e\0 如下:变量B = checked((类型B)变量A),同时也可以在编译器中修改配置,使编译器在编译时检查转换是否溢出。方法见p77
h8PRV$~^$~Q2~0 2) 使用Convert命令进行类型转换,有可能转换不成功,这是编译器会出现错误提示。
*S(o9SY!v|_,]0 3) 对于混合的转换,就根据运算符的优先级,在处理每个运算符时执行转换。
X5^ KG%EKFC%q:W0 */51Testing软件测试网(CE l6S/y/fW[xf
51Testing软件测试网6Re`%y
`b6S9W double aDouble;51Testing软件测试网n7f*i:k
Bvy;~4T0O3n[
aDouble = aFloat; //隐式转换51Testing软件测试网w3D(y0u8\
/*
`/m1RId~ Gp!V0 隐式转换的一般规则:51Testing软件测试网k6x#Lsbu3o0] s
h$p$]l
1)bool和string类型没有隐式转换51Testing软件测试网+oRv a'PS
2)任何类型A,只要其取值范围完全包含在类型B的取值范围内,就可以隐式转换成类型B
5p(x3U)zaap0 */51Testing软件测试网 l9RJ'?m/vV
51Testing软件测试网i`C x5g'p9\(E Console.WriteLine ("类型转换结果:{0} ,{1}",aInteger,aDouble);51Testing软件测试网
Vu7u4V6JG2Mi:M
}51Testing软件测试网
@_2K%X5h%e&ut
51Testing软件测试网K'd a6[G/}%c
//枚举类型的使用
m t5s%vokV0 //1)把枚举值转换成其他类型,必须进行显示转换51Testing软件测试网0v9V9X;_T&F
cnc0o
//2)以该程序为例,要使long类型转换成Data类型(枚举类型)也需要显示转换,而且这样转换会在应用程序的后面违反逻辑。
n] |6|pM0 //3)枚举类型转换成string,必须使用Convert.ToString或者ToString
;A [j.Cgx0 //4)string转换成枚举类型:(枚举类型) 枚举 = (枚举类型)Enum.Parse(typeof(枚举类型),string);51Testing软件测试网.e_7U.w
\:}q s`
long x = (long)Data.Min ;
y1l hZ3~/Pq0 long y = (long)Data.Max ;
ezHX+TT0 Console.WriteLine ("枚举类型的值:{0} ,{1}",x,y);
3s3c^6WfaOiX.m0P`&h+X.oC+ks&R0 //结构的使用51Testing软件测试网^Vv#k`0I#O%l
MyPoint aPoint;
4{kjd
UtV#i0 aPoint.x = 10;
.E7c
g%lX+l5Rd't1xz0 aPoint.y = 100;
k#Zy^wmtk)r0 Console.WriteLine ("结构类型的值:{0} ,{1}",aPoint.x ,aPoint.y );51Testing软件测试网utj6O I
W
Console.ReadLine();
!q6O3X2w3t/O&O"o0;GF#v7R2y0 }
5Nm)G:a"Jt7nv0|A5v2ai0 //枚举类型的定义51Testing软件测试网x?J$R|}
/*
%W^3j)O;V@7d$T!x4c0 1)枚举的基本类型可以是 byte,sbyte,short,ushort,int,uint,long,ulong,默认的情况下,每个值都会根据定义的顺序(从0开始),自动赋给对应的基本类型值。
J*dvzJ4K
P;V0 可以重写这个赋值过程,使用=运算符,给每个枚举赋值。
3]y/x|Y%m0 */51Testing软件测试网:@`6M_7?M:GS
enum Data : long { 51Testing软件测试网4tM'{q E(_
Min = 255L, Mid = 1024L, Max = 32768L
QU)L$r
Nj7\ ?Oo(B9u0 };
"t9U V2o-u_f1XH mX051Testing软件测试网eAXI,^!a //结构的定义
$dX0FSni1j4hG^0 //1) 结构和类在使用上没有区别,唯一的区别是在内存里的存储方式,结构是值类型,而类是引用类型,
2O/n7C({.tY0 //在需要访问快,计算少的地方用结构,计算多的地方用类。51Testing软件测试网%B~qEF
ccEHFts
public struct MyPoint
lh `G`
B.u2f0 {
WV^1i#gzs)`/AY0 public int x, y;
;A$h`*Qt^0m7A0 public MyPoint( int x, int y)51Testing软件测试网GU"L'ivM*`
{
OWk&CYE0 this.x = x;51Testing软件测试网-}
mXCoT {9N
this.y = y;
bzwg{.[f9i*Q0 }
^m1BI2jEEqo0 }
Z~*r@5^0 }51Testing软件测试网E!q&no#~sYg
}51Testing软件测试网5e\3}L,X!X*M@
?0M
qJb[
pb`_ c0]@f0