(2) 引用類型
包括:對象類型、類類型、接口、元數(shù)據(jù)、字符串類型、數(shù)組。
與C++相比,C#的主要特點(diǎn)有:
1) C#語言自C/C++演變而來。但是,它是完全按照面向?qū)ο蟮乃枷雭碓O(shè)計(jì)的,并保證了類型的安全性。
2) C#簡化了C++在類、名稱空間、方法重載和異常處理等方面的使用。摒棄了C++的復(fù)雜性,使它更易用、更少出錯。
3) C#減少了C++的一些特性,不再有宏、多重繼承。特別對企業(yè)開發(fā)者來說,上述功能只會產(chǎn)生更多的麻煩而不是效益。
4) C#采用嚴(yán)格的類型安全、版本控制、垃圾收集(garbage collect)等等。所有的這些功能的目標(biāo)都是瞄準(zhǔn)了開發(fā)面向組件的軟件開發(fā)。
5) C#中不再有“::”、“.”、和“->”操作符,僅使用單個操作符“.”。
6) C#使用統(tǒng)一的類型系統(tǒng),摒棄了C++多變的類型系統(tǒng)。
7) 在C#中,不能在類的外部定義全局函數(shù)、變量或者是常量等。所有的東西都必須封裝在類中,包括實(shí)例成員或靜態(tài)成員。從而使C#代碼更加易讀且有助于減少潛在的命名沖突。
8) 在C#中,不能使用沒有初始化的變量。從而避免了由于使用不經(jīng)初始化的變量而導(dǎo)致的計(jì)算結(jié)果錯誤。
2. C#語言中,值類型和引用類型有何不同?
【解答】
值類型和引用類型的區(qū)別在于,值類型的變量直接存放實(shí)際的數(shù)據(jù),而引用類型的變量存放的則是數(shù)據(jù)的地址,即對象的引用。
值類型變量直接把變量的值保存在堆棧中,引用類型的變量把實(shí)際數(shù)據(jù)的地址保存在堆棧中,而實(shí)際數(shù)據(jù)則保存在堆中。注意,堆和堆棧是兩個不同的概念,在內(nèi)存中的存儲位置也不相同,堆一般用于存儲可變長度的數(shù)據(jù),如字符串類型;而堆棧則用于存儲固定長度的數(shù)據(jù),如整型類型的數(shù)據(jù)int(每個int變量占用四個字節(jié))。由數(shù)據(jù)存儲的位置可以得知,當(dāng)把一個值變量賦給另一個值變量時,會在堆棧中保存兩個完全相同的值;而把一個引用變量賦給另一個引用變量,則會在堆棧中保存對同一個堆位置的兩個引用,即在堆棧中保存的是同一個堆的地址。在進(jìn)行數(shù)據(jù)操作時,對于值類型,由于每個變量都有自己的值,因此對一個變量的操作不會影響到其它變量;對于引用類型的變量,對一個變量的數(shù)據(jù)進(jìn)行操作就是對這個變量在堆中的數(shù)據(jù)進(jìn)行操作,如果兩個引用類型的變量引用同一個對象,實(shí)際含義就是它們在堆棧中保存的堆的地址相同,因此對一個變量的操作就會影響到引用同一個對象的另一個變量。
3. 結(jié)構(gòu)和類的區(qū)別是什么?
【解答】
1) 結(jié)構(gòu)是一個值類型,保存在棧上,而類是一個引用類型,保存在受管制的堆上。
2) 對結(jié)構(gòu)中的數(shù)據(jù)進(jìn)行操作比對類或?qū)ο笾械臄?shù)據(jù)進(jìn)行操作速度要快。
3) 一般用結(jié)構(gòu)存儲多種類型的數(shù)據(jù),當(dāng)創(chuàng)建一個很多類或?qū)ο蠊灿玫男⌒蛯ο髸r,使用結(jié)構(gòu)效率更高。
包括:對象類型、類類型、接口、元數(shù)據(jù)、字符串類型、數(shù)組。
與C++相比,C#的主要特點(diǎn)有:
1) C#語言自C/C++演變而來。但是,它是完全按照面向?qū)ο蟮乃枷雭碓O(shè)計(jì)的,并保證了類型的安全性。
2) C#簡化了C++在類、名稱空間、方法重載和異常處理等方面的使用。摒棄了C++的復(fù)雜性,使它更易用、更少出錯。
3) C#減少了C++的一些特性,不再有宏、多重繼承。特別對企業(yè)開發(fā)者來說,上述功能只會產(chǎn)生更多的麻煩而不是效益。
4) C#采用嚴(yán)格的類型安全、版本控制、垃圾收集(garbage collect)等等。所有的這些功能的目標(biāo)都是瞄準(zhǔn)了開發(fā)面向組件的軟件開發(fā)。
5) C#中不再有“::”、“.”、和“->”操作符,僅使用單個操作符“.”。
6) C#使用統(tǒng)一的類型系統(tǒng),摒棄了C++多變的類型系統(tǒng)。
7) 在C#中,不能在類的外部定義全局函數(shù)、變量或者是常量等。所有的東西都必須封裝在類中,包括實(shí)例成員或靜態(tài)成員。從而使C#代碼更加易讀且有助于減少潛在的命名沖突。
8) 在C#中,不能使用沒有初始化的變量。從而避免了由于使用不經(jīng)初始化的變量而導(dǎo)致的計(jì)算結(jié)果錯誤。
2. C#語言中,值類型和引用類型有何不同?
【解答】
值類型和引用類型的區(qū)別在于,值類型的變量直接存放實(shí)際的數(shù)據(jù),而引用類型的變量存放的則是數(shù)據(jù)的地址,即對象的引用。
值類型變量直接把變量的值保存在堆棧中,引用類型的變量把實(shí)際數(shù)據(jù)的地址保存在堆棧中,而實(shí)際數(shù)據(jù)則保存在堆中。注意,堆和堆棧是兩個不同的概念,在內(nèi)存中的存儲位置也不相同,堆一般用于存儲可變長度的數(shù)據(jù),如字符串類型;而堆棧則用于存儲固定長度的數(shù)據(jù),如整型類型的數(shù)據(jù)int(每個int變量占用四個字節(jié))。由數(shù)據(jù)存儲的位置可以得知,當(dāng)把一個值變量賦給另一個值變量時,會在堆棧中保存兩個完全相同的值;而把一個引用變量賦給另一個引用變量,則會在堆棧中保存對同一個堆位置的兩個引用,即在堆棧中保存的是同一個堆的地址。在進(jìn)行數(shù)據(jù)操作時,對于值類型,由于每個變量都有自己的值,因此對一個變量的操作不會影響到其它變量;對于引用類型的變量,對一個變量的數(shù)據(jù)進(jìn)行操作就是對這個變量在堆中的數(shù)據(jù)進(jìn)行操作,如果兩個引用類型的變量引用同一個對象,實(shí)際含義就是它們在堆棧中保存的堆的地址相同,因此對一個變量的操作就會影響到引用同一個對象的另一個變量。
3. 結(jié)構(gòu)和類的區(qū)別是什么?
【解答】
1) 結(jié)構(gòu)是一個值類型,保存在棧上,而類是一個引用類型,保存在受管制的堆上。
2) 對結(jié)構(gòu)中的數(shù)據(jù)進(jìn)行操作比對類或?qū)ο笾械臄?shù)據(jù)進(jìn)行操作速度要快。
3) 一般用結(jié)構(gòu)存儲多種類型的數(shù)據(jù),當(dāng)創(chuàng)建一個很多類或?qū)ο蠊灿玫男⌒蛯ο髸r,使用結(jié)構(gòu)效率更高。

