程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> SUNWEN教程之----C#進階7

SUNWEN教程之----C#進階7

編輯:關於C語言
這裡所說的是一種與類(class)相對的東西,下面我就與類相對比,來說一說這個struct.

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

000: // Structs\struct1.cs
001: using System;
002: struct SimpleStruct
003: {
004:     private int xval;
005:     public int X
006:     {
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 TestClass
022: {
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.cs
001: using System;
002:
003: class TheClass
004: {
005:     public int x;
006: }
007:
008: struct TheStruct
009: {
010:     public int x;
011: }
012:
013: class TestClass
014: {
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
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved