0 Z% S9 _% Y! o: ?c#提供了一系列预定义类型。它们与c/c++有不少相似的地方。预定义引用类型有object和string。 " K! K. u- N) S0 u. lobject类型是所有其他类型的基础。 ) k6 G+ l' u. p9 e2 Z" @" B
2 r$ Q% }" r- K8 y! X1 `! b1 \
预定义类型包括符号数、无符号数、浮点、布尔、字符和十进制数。符号数有:sbyte、short、 7 h) l( x8 D2 Wint和long;无符号数有:byte、ushort、uint和ulong;浮点数有:float和double。 * m+ ^( X+ h0 _4 u
6 ^! i. N4 k& j2 |# e: @. Z5 q布尔类型就像一个开关,只有两种状态:true或false。c#对布尔的要求比c/c++严格,与java类似。 + c/ c5 q) Q# _4 t3 r2 f% P
在c#中false不等于0,true也不等于1;false和true都是单独分离出来的一个值。学过c/c++的网友 - {$ |. F ]- v, `1 e2 s
都知道:*/ * {" x6 w! m, l4 ~8 E
int i = 0; / v: O' `. q" s$ i, G" h1 Nif (i = 0) { // Bug: 应该是 (i == 0) 8 G" H" K+ U' X/ ?. _.... - X/ W% j. J1 g( `/ g# x% \} B% t2 f# T5 Z3 v/* 是没有问题的。但在c#中会引发一个编译错误(error CS0029: Cannot implicitly convert . t# u" m0 {1 g4 C# j; A6 F
type 'int' to 'bool')。当然,这样牺牲了一点没有必要的灵活性。我们再也不能这样:*/ ; I: O4 n( O: V6 N7 h7 V+ g" U
string str; ' ?" d0 u: t8 F% X2 m: q.... 5 t4 v8 G- x1 M# s$ gif(str = Console.ReadLine()) { , z+ K' e7 S+ l/ B3 w
Console.WriteLine("Your comments are: {0}",str); . m! j2 U/ ], ?% X. k
.... % |( K: r% ]) j' x s/* 而必须:*/ 0 [9 P% `, e- V0 z; C0 g
using System; - ~9 U3 v) o4 K# Vclass BoolTest c% ]1 W. M7 c, \, K{ " A# Z0 E. R5 J1 K7 E static void Main() { ( a# p* y% B" P8 o( p& o. s
string str = Console.ReadLine();//也可以:string str; " S' u6 P2 \0 I& r1 t if(str == "") // if((str = Console.ReadLine()) == "") ! ]0 y" N; y; I: |* Q, B& n+ i Console.WriteLine("i can't read your comments. Please tell me something! O.K.?"); 1 D8 k5 H& b6 ^. j else 1 Z! f1 z3 ?, i& U3 b3 F6 k5 M Console.WriteLine("Your comments are: {0}",str); $ I: k4 X1 S7 v2 b, C } ( N+ U) X' d7 r8 _( Q5 X) I
} $ i/ O2 a* \; C+ l( q' n# X/* 6 I' P- F, l, O+ m; P& ~$ A8 N8 {; s
我抄了一张预定义类型的简表供大家参考。 ; K8 F) y0 P% [, y) L/ l6 s' _% {& T; Q e5 R& I6 i* L9 u
Type Description Examples 6 ~$ U" D3 U7 P) A$ T; K5 P/ T9 v
. K/ ]; W6 \- Fobject The ultimate base type of all other types object o = new Stack(); 8 m6 A& J( |' f! p/ Z5 N) @! ~1 S8 h$ Q$ V1 O% n _" F$ |3 u, o8 q
string String type; a string is a sequence of string s = "Hello"; 0 p9 j! F" F3 h3 U Unicode characters ( I" a& c' ]1 d+ v) o6 I
2 R! O; F* o) K3 e2 w. c
sbyte 8-bit signed integral type sbyte val = 12; f0 A' B$ ]8 Z9 H1 O
" K% I* M6 u& y Q* ~: B+ E# ^! Yshort 16-bit signed integral type short val = 12; , S m" |+ e) E+ P: e# t) \7 M' r6 A, C3 [# J5 h
int 32-bit signed integral type int val = 12; ! z1 x+ O8 O- f+ r* z* S1 T' O& d1 Z7 m
- u+ u; p6 G0 y( @long 64-bit signed integral type long val1 = 12; 4 ~! c O2 C9 _/ v' c+ \ long val2 = 34L; ' c+ V; Z5 R a& N$ _( p* E# r, p" a7 u/ o4 e
byte 8-bit unsigned integral type byte val1 = 12; ( K9 h1 D4 S" D- S4 r* g {+ a/ E byte val2 = 34U; * \& _9 v9 J; G# M5 \- Z ' W# w2 ~4 s0 H, [8 \9 ~9 U- [' Tushort 16-bit unsigned integral type ushort val1 = 12; $ n) x: E; g) K
ushort val2 = 34U; + G) L- i; a5 T1 C
1 h3 A& d' A% R4 c! Y) O0 z9 puint 32-bit unsigned integral type uint val1 = 12; ; ?( s* ]: Z+ K+ A' y uint val2 = 34U; 8 W* m% j2 C; r e+ d7 j/ T5 C