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

來源:互聯網
上載者:User
教程 SUNWEN教程之----C#進階
(六)
mrfat@china.com  
大家好,我是武漢華師的SUNWEN.現在是五月二號晚上19:27,由於閑著沒事幹,所有又寫起來了.昨天照了十幾張相,待會可以去取了,不知照片中的我是不是很帥,呵呵!現在我耳邊正聽著2000歐洲杯的曲子,所以比較激動.唉,身為我們院2000級足球隊長的我,已經很久沒有踢球了!

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

在C#中,如果你在聲明一個方法的時候用了virtual這個關鍵字,那麼,在衍生類別中,你就可以使用override或者new關鍵字來棄用它或是忽略它.如果你在父類中用了virtual這個關鍵字,而在其衍生類別中又沒有用override或new關鍵字,而直接引用一個同名方法的話,編譯器將會報錯,並將以new方式,即忽略衍生類別中的方法的方式來運行.下面的例子可以協助你來理解:


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() // 系統在這裡將會有一個警告,並且將會隱藏方法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關鍵字的輸出是父類中的方法的輸出,所以可以看出,new這個關鍵字的作用是如果在以前的版本中有這個方法,就沿用以前的方法,而不用我現在方法內容.而virtual的方法的作用正好相反,它的作用是如果在父類中有這樣一個方法,則用我現在寫的方法內容,讓以前的滾蛋!不過,這裡用new好象不太好,讓人誤解(糟了,蓋癡又要打我了!&*%$#@).

如果你把第037行去掉,把039-041中的mB全部改為mD,輸出又變為:

MyDerived-Meth1
MyDerived-Meth2
MyDerived-Meth3

這又說明了什麼呢,說明了衍生類別的對象只有在被父類重塑的時候,override和new關鍵字才會生效.呵呵,這樣說的確有點難以理解,大家只有自己動手,才能搞清楚這其中的機關,所謂"實踐是檢驗C#的唯一標準",哈哈!

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

class Base {}
class Derived: Base
{
   public void F() {}
}
和:

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




下一頁


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.