程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 詳細介紹C#數據類型

詳細介紹C#數據類型

編輯:關於C語言
C#編程中,大家會經常使用到不同的數據類型,那麼C#編程語言到底有什麼類型呢?具體如下:

  1.1 值類型

  各種值類型總是含有相應該類型的一個值。C#迫使你初始化變量才能使用它們進行計算-變量沒有初始化不會出問題,因為當你企圖使用它們時,編譯器會告訴你。 每當把一個值賦給一個值類型時,該值實際上被拷貝了。相比,對於引用類型,僅是引用被拷貝了,而實際的值仍然保留在相同的內存位置,但現在有兩個對象指向了它(引用它)。C#的值類型可以歸類如下:

  簡單類型(Simple types )

  結構類型(struct types)

  枚舉類型(Enumeration types)

  1.1.1 簡單類型

  在C#中出現的簡單類型共享一些特性。第一,它們都是.Net系統類型的別名。第二,由簡單類型組成的常量表達式僅在編譯時而不是運行時受檢測。最後,簡單類型可以按字面被初始化。以下為C#簡單類型歸類:

  整型

  布爾型

  字符型 (整型的一種特殊情況)

  浮點型

  小數型

  1.1.1.1 整型

  C#中有9個整型。 sbyte 、byte、 short、 ushort、 int、 uint、 long、 ulong 和 char(單獨一節討論)。它們具有以下特性:

  sbyte型為有符號8位整數,取值范圍在128~127之間。

  bytet型為無符號16位整數,取值范圍在0~255之間。

  short型為有符號16位整數,取值范圍在-32,768~32,767之間。

  ushort型為無符號16位整數,取值范圍在0~65,535之間。

  int型為有符號32位整數,取值范圍在-2,147,483,648~ 2,147,483,647之間。

  uint型為無符號32位整數,取值范圍在 0 ~ 4,294,967,295之間。

  long型為64位有符號整數,取值范圍在9,223,372,036,854,775,808~ 9,223,372,036,854,775,807之間。

  ulong型為64位無符號整數,取值范圍在0 ~ 18,446,744,073,709,551,615之間。

  VB和C程序員都可能會對int和long數據類型所代表的新范圍感到驚訝。和其它的編程語言相比,在C#中,int不再取決於一個機器的字(Word)的大小,而long被設成64位。

  1.1.1.2 布爾型

  布爾數據類型有true和false兩個布爾值。可以賦於true或false值給一個布爾變量,或可以賦於一個表達式,其所求出的值等於兩者之一:

  bool bTest = (80 > 90);

  與C和C++相比,在C#中,true值不再為任何非零值。不要為了增加方便而把其它整型轉換成布爾型。

  1.1.1.3 字符型

  字符型為一個單Unicode 字符。一個Unicode字符16位長,它可以用來表示世界上多種語言。可以按以下方法給一個字符變量賦值:

  char chSomeChar = 'A';

  除此之外,可以通過十六進制轉義符(前綴\x)或Unicode表示法給變量賦值(前綴\u):

  char chSomeChar = '\x0065';

  char chSomeChar = '\u0065';

  不存在把char轉換成其它數據類型的隱式轉換。這就意味著,在C#中把一個字符變量當作另外的整數數據類型看待是行不通的——這是C程序員必須改變習慣的另一個方面。但是,可以運用顯式轉換:

  char chSomeChar = (char)65;

  int nSomeInt = (int)'A';

  在C中仍然存在著轉義符(字符含義)。要換換腦筋,請看表4.1。

  Table 4.1 轉義符( Escape Sequences)

  轉義符 字符名

  \' 單引號

  \" 雙引號

  \\ 反斜槓

  \0 空字符

  \a 感歎號(Alert )

  \b 退格

  \f 換頁

  \n 新行

  \r 回車

  \t 水平 tab

  \v 垂直tab

  1.1.1.4 浮點型

  兩種數據類型被當作浮點型:float和double。它們的差別在於取值范圍和精度:

  float: 取值范圍在 1.5x10^-45~ 3.4x10^38之間, 精度為7位數。

  double: 取值范圍在 5.0x10^-324 ~ 1.7x10^308之間, 精度為 15~16 位數。

  當用兩種浮點型執行運算時,可以產生以下的值:

  正零和負零

  正無窮和負無窮

  非數字值(Not-a-Number,縮寫NaN)

  非零值的有限數集

  另一個運算規則為,當表達式中的一個值是浮點型時,所有其它的類型都要被轉換成浮點型才能執行運算。

  1.1.1.5 小數型(The decimal Type)

  小數型是一種高精度、128位數據類型,它打算用於金融和貨幣的計算。它所表示的范圍從大約1.0x10^-28 到 7.9x10^28,具有28至29位有效數字。要注意,精度是以位數 (digits)而不是以小數位(decimal places)表示。運算准確到28個小數位的最大值。

  正如你所看到的,它的取值范圍比double的還窄,但它更精確。因此,沒有decimal和double之間的隱式轉換——往一個方向轉換可能會溢出,往另外一個方向可能會丟失精度。你不得不運用顯式轉換。

  當定義一個變量並賦值給它時,使用 m 後綴以表明它是一個小數型:

  decimal decMyValue = 1.0m;

  如果省略了m,在變量被賦值之前,它將被編譯器認作double型。

  1.1.2 結構類型

  一個結構類型可以聲明構造函數、常數、字段、方法、屬性、索引、操作符和嵌套類型。盡管列出來的功能看起來象一個成熟的類,但在C#中,結構和類的區別在於結構是一個值類型,而類是一個引用類型。與C++相比,這裡可以用結構關鍵字定義一個類。

  使用結構的主要思想是用於創建小型的對象,如Point和FileInfo等等。你可以節省內存,因為沒有如類對象所需的那樣有額外的引用產生。例如,當聲明含有成千上萬個對象的數組時,這會引起極大的差異。

  清單4.1 包含一個命名為IP的簡單結構,它表示一個使用byte類型的4個字段的IP地址。我不包括方法等,因為這些工作正如使用類一樣,將在下一章有詳細的描述。

  清單1.1 定義一個簡單的結構

  using System;

  struct IP

  {

  public byte b1,b2,b3,b4;

  }

  class Test

  {

  public static void Main()

  {

  IP myIP;

  myIP.b1 = 192;

  myIP.b2 = 168;

  myIP.b3 = 1;

  myIP.b4 = 101;

  Console.Write("{0}.{1}.",myIP.b1,myIP.b2);

  Console.Write("{0}.{1}",myIP.b3,myIP.b4);

  }

  }

  1.1.3 枚舉類型

  當你想聲明一個由一指定常量集合組成的獨特類型時,枚舉類型正是你要尋覓的。最簡單的形式,它看起來可能象這樣:

  enum MonthNames { January, February, March, April };

  因我慣用缺省設置,故枚舉元素是int型,且第一個元素為0值。每一個連續的元素按1遞增。如果你想給第一個元素直接賦值,可以如下把它設成1:

  enum MonthNames { January=1, February, March, April };

  如果你想賦任意值給每個元素——甚至相同的值——這也沒有問題:

  enum MonthNames { January=31, February=28, March=31, April=30 };

  最後的選擇是不同於int的數據類型。可以在一條語句中按如此賦值:

  enum MonthNames : byte { January=31, February=28, March=31, April=30 };

  你可以使用的類型僅限於long、int、short和byte。

  1.2 引用類型

  和值類型相比,引用類型不存儲它們所代表的實際數據,但它們存儲實際數據的引用。在C#中提供以下引用類型給你使用:

  對象類型

  類類 型

  接口

  代表元

  字符串類型

  數組

  1.2.1 對象類型

  對象類型是所有類型之母——它是其它類型最根本的基類。因為它是所有對象的基類,所以可把任何類型的值賦給它。例如,一個整型:

  object theObj = 123;

  給所有的C++程序員一個警告:object並不等價於你可能正在尋找的void*。無論如何,忘掉指針總是個好主意。

  當一個值類型被加框(作為一個對象利用)時,對象類型就被使用了。這一章稍後會討論到加框和消框

  1.2.2 類類型

  一個類類型可以包含數據成員、函數成員和嵌套類型。數據成員是常量、字段和事件。函數成員包括方法、屬性、索引、操作符、構造函數和析構函數。類和結構的功能是非常相似的,但正如前面所述,結構是值類型而類是引用類型。

  希望對你有幫助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved