SUNWEN教程之 C 高階(七) C 教程

2021-04-15 11:52:36 字數 1566 閱讀 6882

好了,言歸正傳.我要說的是c#中的結構(struct),注意,我在這裡說的結構不是指的c#的語言結構.這裡所說的是一種與類(class)相對的東西,下面我就與類相對比,來說一說這個struct.

下面的這個例子講述了如何建立乙個具有屬性,方法和乙個欄位的結構.並講述如何使用他.

000: // structs/struct1.cs

001: using system;

002: struct ******struct

003:

010: set

014: }

015: public void displayx()

016: ", xval);

018: }

019: }

020:

021: class testclass

022:

029: }

這個例子的輸出是:

the stored value is: 5

從上面的例子中我們可以看到結構和類似乎是一樣的.的確,如果你用類去重親寫這個程式,結果是一樣的.但是,很明顯,兩個一樣的東西是不可能一起出現的. 結構(struct)是值(value)型的,而類是參考型的.這樣,你就可以用結構建立像內建型別那樣的物件了.

還有就是如果你用乙個new關鍵字建立乙個類的例項的時候,它是以堆(heap)來分配的,而用new來建立乙個結構的的例項的時候,它是以棧(stack)來分配.這會給我們提高很多效能(m$說的).好了,讓我們再來看下面的例子吧:

000: // structs/struct2.cs

001: using system;

002:

003: class theclass

004:

007:

008: struct thestruct

009:

012:

013: class testclass

014:

019: public static void classtaker(theclass c)

020:

023: public static void main()

024: ", a.x);

032: console.writeline("b.x = ", b.x);

033: }

034: }

這個例子的輸出是:

a.x = 1b.x = 5

從這個例子例子可以看出,當乙個結構被傳遞到乙個方法時,被傳遞的只不過是乙個副本,而乙個類被傳遞時,被傳遞的是乙個參考.所以a.x=輸出的是1,不變,而b.x卻變了.

還有的區別就是結構可以不用new來例項化,而類卻要.如果你不用new來例項化乙個結構,那麼所有的字段將仍然處於未分配狀態,直到所有的字段被初始化.和類一樣,結構可以執行介面.更重要的是,結構沒有繼承性,乙個結構不能從別的類繼承,也不能是別的類的基類.

例三:inte***ce iimage

struct picture : iimage

private int x, y, z; // other struct members

}好了,關於結構我就講到這了,以後還會講到的.

SUNWEN教程之 C 高階7

sunwen 教程之 c 高階 七 m t china.com sunwen.現在是五月四日中午,昨天一天由於在搞自己的技術 叫 鬼子山技術站 嘿嘿,有點恐怖吧 所以沒有寫.等這個站建好後,還要大家多多捧場啊,我們這個站主要是面向教育網的,因為伺服器就在教育網內.好了,言歸正傳.我要說的是c 中的結...

C 高階教程(七)

c 中的結構 struct 我要說的是c 中的,注意,我在這裡說的結構不是指的c 的語言結構.這裡所說的是一種與類 class 相對的東西,下面我就與類相對比,來說一說這個struct.下面的這個例子講述了如何建立乙個具有屬性,方法和乙個欄位的結構.並講述如何使用他.000 structs stru...

C 高階教程之類模板

目錄 為什麼要有模板 注意的幾點 類模板的派生 類模板派生普通類 類模板派生類模板 敲敲 記住兩句話就夠了 1 型別引數化 2 將與型別無關的底層邏輯抽象出來 對於類模板呢,依然是這兩條含義 1 型別引數化 2 將資料結構的表示與演算法不受所包含元素的型別影響 資料結構與演算法的分離 資料型別與演算...