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

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

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

2024-07-21 02:22:24
字體:
供稿:網(wǎng)友
sunwen教程之----c#進(jìn)階
(六)
[email protected]  
大家好,我是武漢華師的sunwen.現(xiàn)在是五月二號晚上19:27,由于閑著沒事干,所有又寫起來了.昨天照了十幾張相,待會可以去取了,不知照片中的我是不是很帥,呵呵!現(xiàn)在我耳邊正聽著2000歐洲杯的曲子,所以比較激動.唉,身為我們院2000級足球隊(duì)長的我,已經(jīng)很久沒有踢球了!

現(xiàn)在我要說的是c#中的版本處理.其實(shí)這是任何一個軟件必須要考慮的問題.每個軟件都不只一個版本(除了我寫的以外),因此版本處理顯得非常地重要.java很好地處理了這個問題,而我個人認(rèn)為c#借鑒了java的處理方法,所以,也做得很好.

在c#中,如果你在聲明一個方法的時候用了virtual這個關(guān)鍵字,那么,在派生類中,你就可以使用override或者new關(guān)鍵字來?xiàng)売盟蚴呛雎运?如果你在父類中用了virtual這個關(guān)鍵字,而在其派生類中又沒有用override或new關(guān)鍵字,而直接引用一個同名方法的話,編譯器將會報錯,并將以new方式,即忽略派生類中的方法的方式來運(yùn)行.下面的例子可以幫助你來理解:


000: // versioning/versioning.cs
001: public class mybase
002: {
003:     public virtual string meth1()
004:     {
005:         return "mybase-meth1";
006:     }
007:     public virtual string meth2()
008:     {
009:         return "mybase-meth2";
010:     }
011:     public virtual string meth3()
012:     {
013:         return "mybase-meth3";
014:     }
015: }
016:
017: class myderived : mybase
018: {
019:     public override string meth1()
020:     {
021:         return "myderived-meth1";
022:     }
023:     public new string meth2()
024:     {
025:         return "myderived-meth2";
026:     }
027:     public string meth3() // 系統(tǒng)在這里將會有一個警告,并且將會隱藏方法meth3()
028:                           
029:                           
030:     {
031:         return "myderived-meth3";
032:     }
033:
034:     public static void main()
035:     {
036:         myderived md = new myderived();
037:         mybase mb = (mybase) md;
038:
039:         system.console.writeline(mb.meth1());
040:         system.console.writeline(mb.meth2());
041:         system.console.writeline(mb.meth3());
042:     }
043: }

輸出:

myderived-meth1
mybase-meth2
mybase-meth3
可以很明顯地看出來,后兩個new關(guān)鍵字的輸出是父類中的方法的輸出,所以可以看出,new這個關(guān)鍵字的作用是如果在以前的版本中有這個方法,就沿用以前的方法,而不用我現(xiàn)在方法內(nèi)容.而virtual的方法的作用正好相反,它的作用是如果在父類中有這樣一個方法,則用我現(xiàn)在寫的方法內(nèi)容,讓以前的滾蛋!不過,這里用new好象不太好,讓人誤解(糟了,蓋癡又要打我了!&*%$#@).

如果你把第037行去掉,把039-041中的mb全部改為md,輸出又變?yōu)?

myderived-meth1
myderived-meth2
myderived-meth3

這又說明了什么呢,說明了派生類的對象只有在被父類重塑的時候,override和new關(guān)鍵字才會生效.呵呵,這樣說的確有點(diǎn)難以理解,大家只有自己動手,才能搞清楚這其中的機(jī)關(guān),所謂"實(shí)踐是檢驗(yàn)c#的唯一標(biāo)準(zhǔn)",哈哈!

在c#中,你可以自由地為在派生類中為加入一個方法,或者覆蓋父類的方法,如下所示,非常地簡單:

class base {}
class derived: base
{
   public void f() {}
}
和:

class base
{
   public void f() {}
}
class derived: base
{
   public void f() {}
}
好了,這一節(jié)又完了,音樂還沒完,但是我真的要休息了,明天見!




下一頁

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 易门县| 曲沃县| 新建县| 疏附县| 松原市| 泾源县| 长阳| 莆田市| 秭归县| 铜梁县| 祁东县| 普格县| 鄢陵县| 宁陵县| 龙门县| 黎川县| 淮北市| 江山市| 金山区| 社旗县| 达尔| 崇阳县| 陈巴尔虎旗| 仙游县| 青河县| 衡东县| 仪陇县| 辛集市| 集安市| 洪湖市| 孟津县| 晴隆县| 永城市| 海盐县| 会同县| 淄博市| 綦江县| 九龙县| 苏尼特左旗| 深圳市| 孟州市|