国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開發(fā) > 綜合 > 正文

SUNWEN教程之----C#進(jìn)階7

2024-07-21 02:20:15
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
sunwen教程之----c#進(jìn)階
(七)
[email protected]  
大家好,我是武漢華師的sunwen.現(xiàn)在是五月四日中午,昨天一天由于在搞自己的技術(shù)網(wǎng)站,叫"鬼子山技術(shù)站",(嘿嘿,有點(diǎn)恐怖吧!)所以沒(méi)有寫.等這個(gè)站建好后,還要大家多多捧場(chǎng)啊,我們這個(gè)站主要是面向教育網(wǎng)的,因?yàn)榉?wù)器就在教育網(wǎng)內(nèi).

好了,言歸正傳.我要說(shuō)的是c#中的結(jié)構(gòu)(struct),注意,我在這里說(shuō)的結(jié)構(gòu)不是指的c#的語(yǔ)言結(jié)構(gòu).這里所說(shuō)的是一種與類(class)相對(duì)的東西,下面我就與類相對(duì)比,來(lái)說(shuō)一說(shuō)這個(gè)struct.

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

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: }

這個(gè)例子的輸出是:

the stored value is: 5
從上面的例子中我們可以看到結(jié)構(gòu)和類似乎是一樣的.的確,如果你用類去重親寫這個(gè)程序,結(jié)果是一樣的.但是,很明顯,兩個(gè)一樣的東西是不可能一起出現(xiàn)的. 結(jié)構(gòu)(struct)是值(value)型的,而類是參考型的.這樣,你就可以用結(jié)構(gòu)建立像內(nèi)建類型那樣的對(duì)象了.

還有就是如果你用一個(gè)new關(guān)鍵字建立一個(gè)類的實(shí)例的時(shí)候,它是以堆(heap)來(lái)分配的,而用new來(lái)建立一個(gè)結(jié)構(gòu)的的實(shí)例的時(shí)候,它是以棧(stack)來(lái)分配.這會(huì)給我們提高很多性能(m$說(shuō)的).好了,讓我們?cè)賮?lái)看下面的例子吧:



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: }

這個(gè)例子的輸出是:

a.x = 1b.x = 5
從這個(gè)例子例子可以看出,當(dāng)一個(gè)結(jié)構(gòu)被傳遞到一個(gè)方法時(shí),被傳遞的只不過(guò)是一個(gè)副本,而一個(gè)類被傳遞時(shí),被傳遞的是一個(gè)參考.所以a.x=輸出的是1,不變,而b.x卻變了.

還有的區(qū)別就是結(jié)構(gòu)可以不用new來(lái)實(shí)例化,而類卻要.如果你不用new來(lái)實(shí)例化一個(gè)結(jié)構(gòu),那么所有的字段將仍然處于未分配狀態(tài),直到所有的字段被初始化.和類一樣,結(jié)構(gòu)可以執(zhí)行接口.更重要的是,結(jié)構(gòu)沒(méi)有繼承性,一個(gè)結(jié)構(gòu)不能從別的類繼承,也不能是別的類的基類.

例三:

interface iimage
{
    void paint();
}

struct picture : iimage
{
    public void paint()
    {
         // painting code goes here
    }
    private int x, y, z;  // other struct members
}
好了,關(guān)于結(jié)構(gòu)我就講到這了,以后還會(huì)講到的.
下一頁(yè)


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 临夏市| 达拉特旗| 寻乌县| 临漳县| 舒城县| 塔城市| 八宿县| 滨州市| 横山县| 泰宁县| 山阳县| 梅州市| 霍州市| 阿鲁科尔沁旗| 南京市| 内丘县| 轮台县| 左云县| 克东县| 景东| 八宿县| 温州市| 武邑县| 龙胜| 寿光市| 台南市| 安阳市| 丁青县| 若尔盖县| 繁峙县| 赤峰市| 肃北| 武义县| 襄城县| 赣榆县| 奇台县| 商都县| 克东县| 泗洪县| 土默特右旗| 洪江市|