• <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#進階教程(六): 現在我要說的是C#中的版本處理.其實這是任何一個軟件必須要考慮的問題.每個軟件都不只一個版本(除了我寫的以外),因此版本處理顯得非常地重要.JAVA很好地處理了這個問題,而我個人認為C#借鑒了JAVA的處理方法,所以,也做得很好. 在C#中,如果你
    C#進階教程(六):   現在我要說的是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() {}
    }

       好了,這一節又完了,音樂還沒完,但是我真的要休息了,明天見!

    原文轉自: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>