专注于自动化测试,性能测试.......

C#的类型转换,枚举,结构

上一篇 / 下一篇  2008-03-05 15:31:50 / 个人分类:C# Programming

51Testing软件测试网 a r 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 H5Grx5nk!{x:I

namespace CValueApp51Testing软件测试网'}'v+L Y O!a/A%?3{Za
{
J+me3|&S o0 /// <summary>
B?'O1A K(}~w0 /// Class1 的摘要说明。
N"uqc C.QS2f"y0 /// </summary>
3jJ7]{!R d0 class Class151Testing软件测试网9W?3\E@8AS!z
 {51Testing软件测试网4D~;S0v8?)g o.l
  /// <summary>51Testing软件测试网 DAa9Ef
  /// 应用程序的主入口点。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;S t8R _
   // TODO: 在此处添加代码以启动应用程序
5C&\$H fu\0   //51Testing软件测试网5rK2w5X;M z3N|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(qy C9o^b0   char aChar = 'y';
!rp'b)p,~)S-z0   Console.WriteLine ("值类型的初始化值:{0} ,{1} ,{2} ,{3}",aShort,aByte,aDecimal,aChar);51Testing软件测试网Z6W%^*LT

51Testing软件测试网~b S4xyry%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[7T LP(^
                 变量B = (类型B)变量A51Testing软件测试网:zx _0Z WX-M@Gn
                 显示转换的相关问题:51Testing软件测试网1u jf%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软件测试网(CEl6S/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%vok V0            //1)把枚举值转换成其他类型,必须进行显示转换51Testing软件测试网0v9V9X;_T&F cn c0o
            //2)以该程序为例,要使long类型转换成Data类型(枚举类型)也需要显示转换,而且这样转换会在应用程序的后面违反逻辑。
n]|6|pM0            //3)枚举类型转换成string,必须使用Convert.ToString或者ToString
;A [j.Cg x0            //4)string转换成枚举类型:(枚举类型) 枚举 = (枚举类型)Enum.Parse(typeof(枚举类型),string);51Testing软件测试网.e_7U.w \:}qs`
   long x = (long)Data.Min ;
y1lhZ3~/Pq0   long y = (long)Data.Max ;
ezHX+TT0   Console.WriteLine ("枚举类型的值:{0} ,{1}",x,y);

3s3c^6WfaOiX.m0

P`&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~qE F c cEHFts
  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软件测试网G U"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

TAG: 编程学习

 

评分:0

我来说两句

wxf_xsfy

wxf_xsfy

自动化测试的拥簇者,善于自动化测试的框架和工具开发,TIB工作室核心成员

日历

« 2024-04-26  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 381464
  • 日志数: 79
  • 图片数: 1
  • 文件数: 1
  • 书签数: 3
  • 建立时间: 2007-09-19
  • 更新时间: 2018-01-30

RSS订阅

Open Toolbar