c#中的結構(struct)
我要說的是c#中的,注意,我在這裡說的結構不是指的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 高階(七) C 教程
好了,言歸正傳.我要說的是c 中的結構 struct 注意,我在這裡說的結構不是指的c 的語言結構.這裡所說的是一種與類 class 相對的東西,下面我就與類相對比,來說一說這個struct.下面的這個例子講述了如何建立乙個具有屬性,方法和乙個欄位的結構.並講述如何使用他.000 structs s...
菜鳥教程C 高階教程
c 特性 attribute net框架提供了三種預定義特性 attributeusage conditional obsolete 預定義特性attributeusage 預定義特性attributeusage描述了如何使用乙個自定義特性類,它規定了特性可應用到的專案的型別。attributeus...
C 學習教程七
結構可以實現介面,但它們無法繼承另乙個結構。因此,結構成員無法宣告為 protected。結構還可以包含建構函式 常量 字段 方法 屬性 索引器 運算子 事件和巢狀型別,但如果同時需要上述幾種成員,則應當考慮改為使用類作為型別。struct mybook mybook mybook mybook.p...