首頁  >  文章  >  後端開發  >  SUNWEN教程之----C#進階(六)

SUNWEN教程之----C#進階(六)

黄舟
黄舟原創
2016-12-19 10:21:391041瀏覽

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

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


000: // Versioningversioning .cs
001: public class MyBase 
002: {
003: public virtual string Meth1() 
004: {
005: return "MyBase-Meth1";
006:0 : {
009: return "MyBase-Meth2";
010: }
011: public virtual string Meth3() 
012: {
013: return "MyBase-Meth3";
}14:5
017: class MyDerived : MyBase 
018: {
019: public override string Meth1() 
020: {
021: return "MyDerived-Meth1";02:002:002:002:003); {
025: return "MyDerived-Meth2";
026: }
027: public string Meth3() // 系統在這裡將會有一個警告,並且將會隱藏方法Meth3() 
028: 
029: : {
031: return "MyDerived-Meth3";
032: }
033: 
034: public static void Main() 
035: {
036: MyDeriD. MyBase) mD;
038: 
039: System.Console.WriteLine(mB.Meth1());
040: System.Console.WriteLine(mB.Meth2());
041: System.Consmm.WritemB. Meth3());
042: }
043: }

輸出:

MyDerived-Meth1
MyBase-Meth2
MyBase-Meth3
可以很明顯地看出來,後兩個父類的關鍵字是父類中new的方法的輸出,所以可以看出,new這個關鍵字的作用是如果在以前的版本中有這個方法,就沿用以前的方法,而不用我現在方法內容.而virtual的方法的作用正好相反,它的作用是如果在父類中有這樣一個方法,則用我現在寫的方法內容,讓以前的滾蛋!不過,這裡用new好像不太好,讓人誤解(糟了,蓋痴又要打我了!&*%$#@).

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

MyDerived-Meth1

MyDerived-Meth2

Myved Meth3

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

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

class Base {}

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

}

和:

class Base : Base

{

public void F() {}
}

 以上就是SUNWEN教學----C#進階(六)的內容,更多相關內容請關注PHP中文網(www.php.cn )!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn