首頁  >  文章  >  後端開發  >  SUNWEN教程之----C#進階(七)

SUNWEN教程之----C#進階(七)

黄舟
黄舟原創
2016-12-19 10:23:041125瀏覽

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

下面的這個例子講述瞭如何建立一個具有屬性,方法和一個字段的結構.並講述如何使用他.

000: // Structsstruct1.cs
001: using System;
002: struct SimpleStruct
003: {
004: PRivate int xval;
005: public int X
006: {
007: get {
008: returnvalval : if (value 012: xval = value;
013: }
014: }
015: public void DisplayX()
016: {
017: Console.WriteLine()
016: {
017: Console.WriteLine(The
{The store: Console.Write ", xval);
018: }
019: }
020: 
021: class TestClass
022: {
023: public static void Main()
024: {
023: public static void Main()
024: {
025: public staticd 026: ss.X = 5;
027: ss.DisplayX();
028: }

029: }

這個範例的輸出是:


The stored value is: 55

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

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



000: // Structsstruct2.cs
001: using System;
002:
003: class TheClass
004: { 007:
008: struct TheStruct
009: {
010: public int x;
011: }
012:
013: class TestClass
014: {
015: public
(Thestructt:) public詞017: s.x = 5;
018: }
019: public static void classtaker(TheClass c)
020: {
021: c.x = 5;
022: }
023: public statoid 025: TheStruct a = new TheStruct();
026: TheClass b = new TheClass();
027: a.x = 1;
028: b.x = 1;
029: structtaker(a)aker; ;
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 : IImage

{
public void Paint()
struct : IImage
{

public void Paint()

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

 以上就是SUNWEN教程之----C#進階(七)的內容,更多相關內容請關注PHP中文網(www.php .cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn