|
源代码网推荐
大家好,我是武汉华师的SUNWEN.现在是五月二号晚上19:27,由于闲着没事干,所有又写起来了.昨天照了十几张相,待会可以去取了,不知照片中的我是不是很帅,呵呵!现在我耳边正听着2000欧洲杯的曲子,所以比较激动.唉,身为我们院2000级足球队长的我,已经很久没有踢球了!现在我要说的是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: } 源代码网推荐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() {} 源代码网推荐} 源代码网推荐好了,这一节又完了,音乐还没完,但是我真的要休息了,明天见! 源代码网推荐 源代码网推荐
源代码网供稿. |