C 高階教程(七)

2021-04-13 11:31:19 字數 1574 閱讀 7035

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...