C#學習基礎------數據類型

 

C#的數據類型分為兩大類:值類型和引用類型.

,值類型

值類型又分為以下三大類:簡單類型(Simple types)和結構類型(Struct types)和枚舉類型(Enumeration types)

1.簡單類型也稱為純量類型,是直接由一系列遠素構成的數據類型.從計計算機的表示角度來看這些簡單類型可以分為整數類型,布爾類型,字符類型,和實數類型.

1.1整數類型的變量的值為整數,共有以下九种:

數據類型    特征            取值大小

sbyte       有符號8位整數   -128127

byte        無符號8位整數   0255

short       有符號16位整數 -3276832767

ushort      無符號16位整數 065535

int         有符號32位整數 -21474836482147483647

uint        無符號32位整數 04294967295

long        有符號64位整數 -92233720368547758089223372036854775807

ulong       無符號64位整數 018446744073709551615

位數是按2的指數冪來定議的,sbyte占一個字節即28次方.

1.2布爾類型

即真和假,分別用truefalse來表示.C#中不像其它語言可以轉換成真假,這里是不合法的.

1.3實數類型

實數類型分為單精度(float)和雙精度(double)和十進制類型(decimal)三种類型.

單精度表示的大小為1.5*10的負45次方到3.4*1038次方,精度為7位數

雙精度表示的大小為5.0*10的負324次方到1.7*10308次方,精度為1516.

十進制類型是一种高精度的128位數據類型,表的的大小為1.0*10的負28次方到7.9*1028次方的2829位有效數字.定議的時候要用m下標以表明它是一個十進制類型.:

decimal d_value=1.0m;如果沒有m會當是雙精度處理.

1.4字符類型

采用的是unicode字符集一個unicode的標準長度為16.

以下以些轉議字符

"'    單引號

""    雙引號

""    反斜槓

"O    空字符

"a    感嘆號(Alert)

"b    退格

"f    換頁

"n    新行

"r    回車

"t    水平tab

"v    垂直tab

2.結構類型

把一個單一實體的類型就叫做結構類型,每一個變量稱為結構的成員.結構類型的變量采用struct來進行聲明.如下面我們定議的通訊錄記錄結構

struct PhoneBook

{

 public string name;

 public string phone;

 public string address;

}

PhoneBook p1;

ph.name="athrun"; 對成員的訪員

下面是把一個結構類型作為另一個結構類型的成員類型.如下:

struct PhoneBook

{

 public string name;

 public string phone;

 public uint age;

 public struct address

 {

    public string city;

    public string street;

    public uint no;

 }

}

通訊錄這個結構中又包括了"地址"這個結構,結構"地址"類型包括城市,街道,門牌號碼三個成員.

3.枚舉類型

枚舉(enum)實際上是為一組在邏輯上密不可分的整數值提供便於記憶的符號,比如我們聲明一個代表星期的枚舉類型的變量;

enum WeekDay

{

 Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday

};

WeekDay day;

為枚舉類型的元素所給的值類型限於long,int,short,byte等整數類型.

,引用類型

"引用"這個詞在這里的含議是,該類型的變量不直接存儲所包含的值,而是指向它所要存儲的值.也就是說,引用類型存儲實際數據的引用值的地址,引用類型有四种:

,代表,數組,接口.

1,類是一种包含數據成員,函數成員和嵌套類型的數據結構.類的數據成員有常量,域和事件.函數成員包括方法,屬性,索引指示器,運算符,構造函數和析構函數.類和結構同樣都包含了自己的成員,但它們之間最主要的區別在於:類是引用類型,而結構是值類型.

類支持繼承機制,通過繼承,子類可以擴展父類的數據成員和函數方法,進而達到代碼重用和設計重用的目的.下面是一個類:

class PhoneBook

{

 private string _name;

 private string _phone;

 private struct _address

 {

    public string city;

    public string street;

    public uint no;

 }

 

 public string Phone

 {

    get {return _phone;}

    set {_phone=value;}

 }

 public PhoneBook(string n)

 {

    name=n;

 }

 public Edit(){;}

}

上面這個類中包括有數據成員有域name,phone,address屬性Phone;類的函數成員有構造函數PhoneBook(string n),方法Edit.

2.代表(delegate).它實際上相當於c#中的函數指針原型.與指針不同的是,代表在c#是類型安全的.在聲明代表時,只需要指定代表指向的原型的類型,它不能有返回值,也不能帶有輸出類型的參數.

using System;

delegate int MyDelegate(); //聲明一個代表

public class MyClass

{

 public int InstanceMethod()

 {

    Console.WriteLine("Call the instance method");

    return 0;

 }

 static public int StaticMethod()

 {

    Console.WriteLine("Call the static method");

    return 0;

 }

}

public class Test

{

 static public void Main()

 {

    MyClass p=new MyClass();

    //將代表指向非靜態的方法InstanceMethod

    MyDelegate d=new MyDelegate(p.InstanceMethod);

    //調用非靜態方法

    d();

    //將代表指向靜態的方法StaticMethod

    d=new MyDelegate(MyClass.StaticMethod);

    //調用靜態方法

   d();

 }

}

程序的輸出結果是:

call the instance method

call the static method

3.數組

數組是一組類型相同的有序數據.

class Test

{

 static void Main()

 {

    string [] a1;        //一維string數組

    string [,] a2;       //二維

    string [,,] a3;      //三維

    string [][] j2;      //可變數組(數組)

    string [][][][] j3; //多維可變數組

 }

}

,裝箱(boxing)和拆箱(unboxing)

裝箱和拆箱機制使得在c#類型系統中,任何值類型,引用類型和object(對像)類型之間進行轉換,我們稱這种轉為綁定連接.簡單的說,有了裝箱和拆箱後,對任何類型的值來說最終我們都可以看作是object類型.

1,裝箱轉換是將一個值類型隱式地轉換成一個object類型,或者把這個值類型轉換成一個被該值類型應用的接口類型(interface-type).把一個值類型的值裝箱,也就是創建一個object實例並將這個值復制給這個object.

 

我們也可以用顯式的方法來進行裝箱操作:

Int i=10;

Object obj=object(i);

我們看一下下面的程序

Using system;

Class test

{

 Public static void Main()

 {

    Int i=10;

    Object obj=I; //進行裝箱操作,對像類型

   If (obj is int)

   {

      Console.Write(“The value of I is boxing!”);

   }

    I=20; //改變i的值

    Console.WriteLine(“int :i={0}”,i);

    Console.WriteLine(“object: obj={0}”,obj);

 }

}

輸出結果為:

The value of I is boxing!

Int :i=20;

Object obj=10;

這說明了被裝箱的類型的值是作為一個拷貝賦給對像的.

2,拆箱轉換,和裝箱轉換正好相反,拆箱轉換是指將一個對像類型顯式地轉換成一個值類型,或是將一個接口類型顯式地轉換成一個執行該接口的值類型.

拆箱的過程分為兩步:首先,檢查這個對像實例,看它是否為給定的值類型的裝箱值.然後,把這個實例的值拷貝給值類型的變量.
下面是一個對像拆箱的過程:
int i=10;
Object obj=I;
int j=(int)obj;
這個過程用圖來表示如下:

可以看出拆箱剛好是裝箱過程的逆過程.必須注意,裝箱轉換和拆箱轉換必須是類型兼容

posted @ 2007-10-28 08:35  Athrun  阅读(518)  评论(1编辑  收藏  举报