Posted on 2007-02-12 12:30
dennis 閱讀(987)
評論(0) 編輯 收藏 所屬分類:
C#歷程
一.C#的統(tǒng)一類型系統(tǒng)
1.C#的類型系統(tǒng)是統(tǒng)一的,java的類型系統(tǒng)分為:基本類型(原生類型)和類類型,而C#的所有類型直接或間接地從object類類型派生而來,從類型系統(tǒng)上來看比java更OO。
2.C#的類型分為三類:
(1)值類型,
一個值類型或是結(jié)構(gòu)類型,或是枚舉類型
(2)引用類型
(3)指針類型
值類型與引用類型的不同在于:值類型的變量直接包含其數(shù)據(jù),而引用類型的變量存儲對其數(shù)據(jù)的引用(reference),后者稱為對象(object)。對于引用類型,兩個變量可能引用同一個對象,因此對一個變量的操作可能影響另一個變量所引用的對象。對于值類型,每個變量都有自己的數(shù)據(jù)副本,對一個變量的操作不可能影響另一個變量。
二。值類型
1.所有值類型從類System.ValueType隱式繼承,后者又從類object繼承。任何類型都不可能從值類型派生。
2.所有值類型都隱式聲明一個稱為默認構(gòu)造函數(shù)(default constructor)的公共無參數(shù)實例構(gòu)造函數(shù)。默認構(gòu)造函數(shù)返回一個零初始化實例,它就是該值類型的默認值(default value):·????????
對于所有simple-types,默認值是將其所有位都置零的位模式所形成的值:
o???????
對于sbyte、byte、short、ushort、int、uint、long和ulong,默認值為0。
o???????
對于char,默認值為'\x0000'。
o???????
對于float,默認值為0.0f。
o???????
對于double,默認值為0.0d。
o???????
對于decimal,默認值為0.0m。
o???????
對于bool,默認值為false。
·????????
對于enum-typeE,默認值為0。
·????????
對于struct-type,默認值是通過將所有值類型字段設(shè)置為它們的默認值、將所有引用類型字段設(shè)置為null而產(chǎn)生的值。
3.C#中有所謂的簡單類型概念(simple type),類似于java的基本類型,但又不同,C#的簡單類型本質(zhì)上都是結(jié)構(gòu)類型(預(yù)定義集合的結(jié)構(gòu)類型),所以還是值類型,從
System.ValueType繼承而來。C#的簡單類型包括:
保留字 | 化名的類型 |
sbyte | System.SByte |
byte | System.Byte |
short | System.Int16 |
ushort | System.UInt16 |
int | System.Int32 |
uint | System.UInt32 |
long | System.Int64 |
ulong | System.UInt64 |
char | System.Char |
float | System.Single |
double | System.Double |
bool | System.Boolean |
decimal | System.Decimal |
這些簡單類型都是System命名空間中預(yù)定義結(jié)構(gòu)類型的別名(ruby的別名實在貼心)
4.枚舉類型,
枚舉類型是具有命名常量的獨特的類型。每個枚舉類型都有一個基礎(chǔ)類型,該基礎(chǔ)類型必須為
byte、sbyte、short、ushort、int、uint、long 或 ulong。如果沒有為枚舉類型中的元素指定基礎(chǔ)值,默認是從0開始逐一遞增。
三。引用類型
1.引用類型是類類型、接口類型、數(shù)組類型或委托類型。
2.類類型:包括預(yù)定義的類類型和用戶通過class關(guān)鍵字的自定義類類型
3.對象類型:
object類類型是所有其他類型的最終基類。C# ?中的每種類型都是直接或間接從object類類型派生的。
關(guān)鍵字object只是預(yù)定義類System.Object的別名。
4.string類型:
string類型是直接從object繼承的密封類類型。關(guān)鍵字string只是預(yù)定義類System.String的別名.
5.接口類型:
與java中的接口概念基本一致,可以變相實現(xiàn)多重繼承。
類類型 | 說明 |
System.Object | 所有其他類型的最終基類。 |
System.String | C# ?語言的字符串類型。 |
System.ValueType | 所有值類型的基類。 |
System.Enum | 所有枚舉類型的基類。 |
System.Array | 所有數(shù)組類型的基類。 |
System.Delegate | 所有委托類型的基類。 |
System.Exception | 所有異常類型的基類。 |
四。裝箱、拆箱概念
1.裝箱和拆箱的概念是C# ?的類型系統(tǒng)的核心。它在 value-type 和 reference-type 之間的架起了一座橋梁,使得任何 value-type 的值都可以轉(zhuǎn)換為 object 類型的值,反過來轉(zhuǎn)換也可以。
2.裝箱:裝箱轉(zhuǎn)換允許將value-type隱式轉(zhuǎn)換為reference-type。
裝箱的行為可以用下面的過程描述:
sealed class T_Box: System.ValueType
{
T value;
public T_Box(T t) {
???? value = t;
}
}
分配一個對象實例,然后將value-type的值復(fù)制到該實例中
3.拆箱:拆箱轉(zhuǎn)換允許將reference-type顯式轉(zhuǎn)換為value-type。
從對象box到value-typeT的拆箱轉(zhuǎn)換相當(dāng)于執(zhí)行表達式((T_Box)box).value