C#中的結構(struct)

來源:互聯網
上載者:User
C#中的結構(struct)  我要說的是C#中的,注意,我在這裡說的結構不是指的C#的語言結構.這裡所說的是一種與類(class)相對的東西,下面我就與類相對比,來說一說這個struct.下面的這個例子講述了如何建立一個具有屬性,方法和一個欄位的結構.並講述如何使用他.000: // Structs\struct1.cs001: using System;002: struct SimpleStruct003: {004: private int xval;005: public int X006: {007: get {008: return xval;009: }010: set {011: if (value < 100)012: xval = value;013: }014: }015: public void DisplayX()016: {017: Console.WriteLine("The stored value is: {0}", xval);018: }019: }020: 021: class TestClass022: {023: public static void Main()024: {025: SimpleStruct ss = new SimpleStruct();026: ss.X = 5;027: ss.DisplayX();028: }029: }這個例子的輸出是:The stored value is: 5從上面的例子中我們可以看到結構和類似乎是一樣的.的確,如果你用類去重親寫這個程式,結果是一樣的.但是,很明顯,兩個一樣的東西是不可能一起出現的. 結構(struct)是值(value)型的,而類是參考型的.這樣,你就可以用結構建立像內建類型那樣的對象了.  還有就是如果你用一個new關鍵字建立一個類的執行個體的時候,它是以堆(heap)來分配的,而用new來建立一個結構的的執行個體的時候,它是以棧(stack)來分配.這會給我們提高很多效能(M$說的).好了,讓我們再來看下面的例子吧:000: // Structs\struct2.cs001: using System;002:003: class TheClass004: {005: public int x;006: }007:008: struct TheStruct009: {010: public int x;011: }012:013: class TestClass014: {015: public static void structtaker(TheStruct s)016: {017: s.x = 5;018: }019: public static void classtaker(TheClass c)020: {021: c.x = 5;022: }023: public static void Main()024: {025: TheStruct a = new TheStruct();026: TheClass b = new TheClass();027: a.x = 1;028: b.x = 1;029: structtaker(a);030: classtaker(b);031: Console.WriteLine("a.x = {0}", a.x);032: Console.WriteLine("b.x = {0}", b.x);033: }034: }這個例子的輸出是:a.x = 1b.x = 5從這個例子例子可以看出,當一個結構被傳遞到一個方法時,被傳遞的只不過是一個副本,而一個類被傳遞時,被傳遞的是一個參考.所以a.x=輸出的是1,不變,而b.x卻變了.還有的區別就是結構可以不用new來執行個體化,而類卻要.如果你不用new來執行個體化一個結構,那麼所有的欄位將仍然處於未分配狀態,直到所有的欄位被初始化.和類一樣,結構可以執行介面.更重要的是,結構沒有繼承性,一個結構不能從別的類繼承,也不能是別的類的基類.例三:interface IImage{void Paint();}struct Picture : IImage{public void Paint(){// painting code goes here}private int x, y, z; // other struct members}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.