版本控制(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"); } } }
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索namespace
, 版本控制
, 方法
, 版本
, public
, base
, derived class
, c# f lash
一个
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。