好了,言歸正傳.我要說的是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 將資料結構的表示與演算法不受所包含元素的型別影響 資料結構與演算法的分離 資料型別與演算...