[C#] 使用 Override 和 New 關鍵字進行版本控制 (C# 程式設計手冊)

摘要:c# 使用 Override 和 New 關鍵字進行版本控制 (C# 程式設計手冊)

C# 可以讓衍生類別所包含的方法,擁有與基底類別方法相同的名稱。

  • 基底類別方法必須定義為 virtual

  • 如果衍生類別中的方法前面沒有加上 new override 關鍵字,編譯器會發出警告,且方法的行為會如同有 new 關鍵字一般。

  • 如果衍生類別中的方法前面加上 new 關鍵字,該方法會定義為與基底類別中的方法無關。

  • 如果衍生類別中的方法前面加上 override 關鍵字,則衍生類別的物件會呼叫該方法,而不是基底類別方法。

  • 衍生類別可使用 base 關鍵字呼叫基底類別方法。

  • overridevirtualnew 關鍵字也可用於屬性、索引子和事件。

以實際情況為例,可以假設公司 A 建立了名為 GraphicsClass 的類別以供您的程式使用。GraphicsClass 看起來像這樣:

class GraphicsClass
{
    public virtual void DrawLine() { }
    public virtual void DrawPoint() { }
}

您的公司會使用這個類別,您則用來衍生自己的類別並加入新方法:

class YourDerivedGraphicsClass : GraphicsClass
{
    public void DrawRectangle() { }
}

您的應用程式使用起來很正常,直到公司 A 發行新版的 GraphicsClass,如下所示:

class GraphicsClass
{
    public virtual void DrawLine() { }
    public virtual void DrawPoint() { }
    public virtual void DrawRectangle() { }
}

新版的 GraphicsClass 現在多了一個名為 DrawRectangle 的方法。一開始並不會發生任何問題。這是因為新版本仍與舊版的二進位碼相容,表示您所部署的任何軟體都會繼續執行,就算電腦系統上安裝了新的類別也不會有問題。目前對方法 DrawRectangle 所做的任何呼叫,仍會參考您自己衍生類別中的方法版本。

不過,一旦您使用新版 GraphicsClass 重新編譯應用程式,便會收到編譯器發出的警告。如需詳細資訊,請參閱編譯器警告 CS0108

這個警告會通知您,讓您考量自己的 DrawRectangle 方法應如何在應用程式中執行。

 

如果您要讓自己的方法覆寫新的基底類別方法,請使用 override 關鍵字,如下所示:
C#
 
class YourDerivedGraphicsClass : GraphicsClass
{
    public override void DrawRectangle() { }
}

 

內容轉自http://msdn.microsoft.com/zh-tw/library/6fawty39(VS.80).aspx