知识大全 认识.NET中的虚函数[2]
Posted 函数
篇首语:努力到无能为力,拼搏到感动自己本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 认识.NET中的虚函数[2]相关的知识,希望对你有一定的参考价值。
认识.NET中的虚函数[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
运行时绑定仅体现在虚函数中 因此在试验 中 输出的结果是CA Foo 因为Foo没有被申明为virtual 在编译阶段 已经把ca Foo绑定到CA Foo
Override只能用于虚函数中 当子类继承基类 他便拥有了基类所有的函数 Override修饰的函数 将替换基类原来的函数 否则 子类会新增加一个函数 并同时保留基类中的函数 下面的这个例子 很好的说明了这个问题
class CA public virtual void Foo() Console WriteLine( CA Foo ); class CB : CA public override void Foo() Console WriteLine( CB Foo ); class CC : CA public new void Foo() Console WriteLine( CC Foo ); class Test public static void Main() Console WriteLine(typeof(CB) GetMethods() Length); // 输出 Console WriteLine(typeof(CC) GetMethods() Length); // 输出
这段程序输出CB和CC的函数个数 CB的 个函数中 个来自于Sysetm Object 剩下的一个就是Foo CC中多了一个函数 因为使用了new (如果不使用new 也是相同的结果 因为C#编译器默认使用new 但不显示指明new会给出一个警告) 说明了CC Foo是一个不同于CA Foo的虚函数
所以 在试验 中 不使用override 我们在InvokeFoo中调用的还是CA Foo() 虽然这个时候还是运行时绑定 但是因为CB Foo并没有覆蓋CA Foo 因此我们还是得到了基类的实现
当一个函数不是虚函数的时候 子类中相同签名的函数总是覆蓋了父类中的函数 并不需要override关键字 所以c#编译器会把它当作一个错误 如上表中试验 所示
如果读者理解了上面的内容 那么来看看一个略微复杂的情况 我们邀请interface出场!
interface IA void Foo(); class CA: IA public void Foo() Console WriteLine( CA Foo );
[问题]: Foo是虚函数吗?
答案是肯定的 就像interface方法不能显示声明为public一样 我们也不能在IA Foo前面加上virtual 原因很简单 所有的interface方法都是虚函数!在调用interface方法的时候 总是要使用运行时绑定
cha138/Article/program/net/201311/14949相关参考
认识.NET中的虚函数[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! [问题]:CA实现I
认识.NET中的虚函数[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 面向对象的程序设计有
知识大全 如何在Delphi中调用.Net编写的DLL中的函数
如何在Delphi中调用.Net编写的DLL中的函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
C#区别和认识四个判等函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Net有四个判等函数?
认识OracleSQL内置函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! SQL中的单记录函
.Net图片处理函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!cha138/Arti
实例讲解.NET多线程执行函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 这里为什么会出现多
ASP.NET中如何使用匿名函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 尝试从缓存中获取
DateTime数字型 SystemDateTimecurrentTime=newSystemDateTime(); 取当前年月日时分秒 currentTime=SystemDateTimeNow
ASP.NET文件下载函数使用浅析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ASPNET文