• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • C#進階教程(七)

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    C#進階教程(七): 大家好,我是武漢華師的SUNWEN.現在是五月四日中午,昨天一天由于在搞自己的技術網站,叫"鬼子山技術站",(嘿嘿,有點恐怖吧!)所以沒有寫.等這個站建好后,還要大家多多捧場啊,我們這個站主要是面向教育網的,因為 服務器 就在教育網內. 好了,言歸
    C#進階教程(七):   大家好,我是武漢華師的SUNWEN.現在是五月四日中午,昨天一天由于在搞自己的技術網站,叫"鬼子山技術站",(嘿嘿,有點恐怖吧!)所以沒有寫.等這個站建好后,還要大家多多捧場啊,我們這個站主要是面向教育網的,因為服務器就在教育網內.

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

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

    clearcase/" target="_blank" >cccccc">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
    }

       好了,關于結構我就講到這了,以后還會講到的.

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>