----C#推进孙文教程(六)
现在的我想说的是C #版。事实上,任何人都必须考虑这个问题。每个有多个版本(除了我写的),所以版本显得很important.java处理这个问题,我认为C #从处理方法。java很好。
C #,如果你在一个声明一个方法使用virtual关键字,然后,在派生类中,您可以使用覆盖或新的关键词放弃它或忽略它。如果在父类中使用虚拟关键字,派生类中没有使用覆盖或新关键字,以及直接引用同名方法,编译器将是错误的,并且将以新的方式忽略派生类中的方法。下面运行示例的方法可以帮助您理解:
000: / / Versioningversioning.cs
001:我基地公共类
{002:
003:公共虚拟字符串METH1()
{ 004:
005:返回mybase-meth1 ;
006:}
007:公共虚拟字符串的方法()
{ 008:
009:返回mybase-meth2 ;
010:}
011:公共虚拟字符串meth3()
{ 012:
013:返回mybase-meth3 ;
014:}
015:}
016:
017班:MyBase myderived
{ 018:
019:公共重写字符串METH1()
{ 020:
021:返回myderived-meth1 ;
022:}
023:公共新字符串的方法()
{ 024:
025:返回myderived-meth2 ;
026:}
027:字符串(meth3) / /系统在这里会有一个警告,并将隐藏meth3()
028:
029:
{ 030:
031:返回myderived-meth3 ;
032:}
033:
034:公共静态空主()
{ 035:
036:myderived MD =新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
你可以清楚地看到,两个新关键字的输出是在父类中的输出方法,所以你可以看到,新关键字是如果这个方法在以前的版本中,我们使用前面的方法,我现在不这样做。内容的方法和虚拟相反的效果,它的方法,如果在父类的方法使用这样的方法,我现在写的,让以前的!然而,这个新的似乎太好了,误导(坏,盖和疯狂打我!* % $ # @)。
如果你把037行和改变所有的MB 039-041 MD,输出变为:
myderived-meth1
myderived-meth2
myderived-meth3
它解释了只有当父类被重构时,派生类的对象是什么,重写和新关键字才会生效。哦,这一点是很难理解的,只有你自己,为了澄清的权威,所谓的实践是检验的唯一标准C #。哈哈!
C #,你可以自由地添加一个方法,一个派生类,或一个方法覆盖父类,这是非常简单,如下图所示。
类基{ }
派生类:基
{
公共空(f){ }
}
和:
阶级基础
{
公共空(f){ }
}
派生类:基
{
公共空(f){ }
}
好了,音乐节结束了,音乐还没有结束,但我真的得休息了。明天见!