C#进阶教程(六)

2016-02-19 17:11 3 1 收藏

下面这个C#进阶教程(六)教程由图老师小编精心推荐选出,过程简单易学超容易上手,喜欢就要赶紧get起来哦!

【 tulaoshi.com - 编程语言 】

  现在我要说的是C#中的版本处理.其实这是任何一个软件必须要考虑的问题.每个软件都不只一个版本(除了我写的以外),因此版本处理显得非常地重要.JAVA很好地处理了这个问题,而我个人认为C#借鉴了JAVA的处理方法,所以,也做得很好.

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  在C#中,如果你在声明一个方法的时候用了virtual这个关键字,那么,在派生类中,你就可以使用override或者new关键字来弃用它或是忽略它.如果你在父类中用了virtual这个关键字,而在其派生类中又没有用override或new关键字,而直接引用一个同名方法的话,编译器将会报错,并将以new方式,即忽略派生类中的方法的方式来运行.下面的例子可以帮助你来理解:

  

000: // Versioningversioning.cs001: public class MyBase002: {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 : MyBase018: {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-Meth1MyBase-Meth2MyBase-Meth3

  可以很明显地看出来,后两个new关键字的输出是父类中的方法的输出,所以可以看出,new这个关键字的作用是如果在以前的版本中有这个方法,就沿用以前的方法,而不用我现在方法内容.而virtual的方法的作用正好相反,它的作用是如果在父类中有这样一个方法,则用我现在写的方法内容,让以前的滚蛋!不过,这里用new好象不太好,让人误解(糟了,盖痴又要打我了!&*%$#@).

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  如果你把第037行去掉,把039-041中的mB全部改为mD,输出又变为:

  

MyDerived-Meth1MyDerived-Meth2MyDerived-Meth3

  这又说明了什么呢,说明了派生类的对象只有在被父类重塑的时候,override和new关键字才会生效.呵呵,这样说的确有点难以理解,大家只有自己动手,才能搞清楚这其中的机关,所谓"实践是检验C#的唯一标准",哈哈!

  在C#中,你可以自由地为在派生类中为加入一个方法,或者覆盖父类的方法,如下所示,非常地简单:

  

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

  好了,这一节又完了,音乐还没完,但是我真的要休息了,明天见!

来源:https://www.tulaoshi.com/n/20160219/1614493.html

延伸阅读
写在前面的话 在写这些文章之前,我对C#一无所知.只从前辈那里听说了一些,说他很像JAVA.因为我这段时间一直在看JAVA,结果什么明堂没看出来(只能怪我太笨:),其实我想还是没有实践的机会),所以就很想换换口味.其实很早就听说了C#,想看一看这个东东,只是上M$的网站一看,.NET的东东要一百多兆呢!看了就怕,何况全部下载下来,要费我一整张...
大家好,我是SUNWEN.今天下午得知,晚上要去当"更夫".呵呵,我们这个学校很是奇怪,要叫我们轮流去通宵巡逻,从晚上10:30到早上6:00.我有一个物理系的朋友,上次在田家炳楼门前找了一个宣传板,垫在下面就睡了一觉,听了笑死我了!哈哈! 现在我想说的是C#中的容器.这是一个非常重要的话题,因为不管你写什么样的程序,你都不能不与容...
终于又到一个白天了,起床,伸个懒腰,又坐到了电脑前面.今天我要向大家讲的是C#的数组(Arrays).C#中的数组和其它一些优秀的语言一样,也是从0开始计的,这从我们以前的例子里可以看出来,也就是说,一个数组的第一个元素是a[0],而不是像VB的a(1).虽然是这样,但是你还是要注意一些区别. 在声明一个数组的时候,方括号必须跟在类型后面,而不能跟在变量...
大家好,我是武汉华师的SUNWEN.我回来了.现在是五月二号下午3:20.我刚从电脑城回来,买了一版D版的MP3.呜,湖北的同学都回去了,尤其是武汉的,跑得特别快,真是可恨.剩下我一个孤零零的福建佬,没事做,只好一个人听音乐,真是惨!幸好这音乐还比较好听,呵呵,其实SUNWEN一点音乐细胞也没有. 言归正传,我现在要说的是库(libraries),和大家一起学习如何用...
大家好,我是SUNWEN,现在是五月四号23:15,再过十五分钟就要熄灯了.所以要抓紧时间,先开个头,明天继续. 现在我要说的是C#中的用户自定义转换(User-Defined Conversions),其中用到了前面说的struct的知识,就是结构呀,忘了吗?好,没忘就好.从我们以下的课程我们可以看到结构的用处(刚才我还在想它有什么用,呵呵).用class声明的是一个类,而用struct...

经验教程

275

收藏

21
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部