程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#版本控制(1)

C#版本控制(1)

編輯:關於C語言

版本控制(Versioning)主要是為了解決組件的版本不兼容的問題。版本兼容的方式有:

●源代碼級兼容:依賴於舊版本的代碼在重新編譯之後能夠與新版本兼容。

●二進制兼容:依賴於舊版本的應用程序無需重新編譯就能與新版本兼容。

大多數語言根本不支持二進制級的版本兼容,其中許多在源代碼級的兼容問題上也表現的不盡如人意。事實上,許多語言由於自身的缺陷,不改寫客戶代碼就不可能實現組件的升級。

舉個例子,假設基類的作者寫了一個叫Base的類。在第一個版本中,類Base中沒有包含方法F。一個叫Derived的類從Base中繼承,並且聲明了一個方法F。類Derived和類Base一同被交付客戶使用,並且配置到許多客戶機和服務器上。

// Author A
namespace A
{
 public class Base //version 1
 {
 }
}
//Author B
namespace B
{
 class Derived:A.Base
 {
   public virtual void F(){
         System.Console.WriteLine("Derived.F");
   }
 }
}

到目前為止,程序的運行一切正常。然後,Base類的作者提供了一個新版本,給類Base添加了一個方法F。

//Author A
namespace A
{
 public class Base //version 2
 {
   public virtual void F(){  //added in version 2
         System.Console.WriteLine("Base.F");
   }
 }
}

新版本的Base應該和舊版本保持源代碼級兼容和二進制級兼容。不幸的是,類Base中的新方法與類Derived中的F產生了混淆。Derived應該重載Base中的F嗎?看上去不應該,因為Derived已經被編譯,那時Base中甚至還沒有F!但是,如果Derived中的F不重載Base中的F,而它又必須符合基類Base的聲明,可是在寫Derived類時還不存在該聲明。比如某種情況下,Base中的F可能要求被重載。

在解決版本問題時,C#要求開發人員清楚地表達他們的意圖。在原始代碼中,類Base不包括方法F,所以不存在什麼問題。Derived中的F是作為一個新方法,而不是重載基類中的方法。

//Author A
namespace A
{
 public class Base
 {
 }
}
//Author B
namespace B
{
 class Derived:A.Base
 {
  public virtual void F(){
     System.Console.WriteLine("Derived.F");
  }
 }
}
-
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved