知识大全 认识.NET中的虚函数
Posted 函数
篇首语:别裁伪体亲风雅,转益多师是汝师。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 认识.NET中的虚函数相关的知识,希望对你有一定的参考价值。
认识.NET中的虚函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
面向对象的程序设计有三大要素 封装 继承和多态 虚函数是多态的重要组成部分 同时又在类的继承关系中有着很多变化 本文讨论 NET中对虚函数的支持 首先 我们通过一个例子来看看虚函数的普通用法
class CA public virtual void Foo() Console WriteLine( CA Foo ); class CB : CA public override void Foo() Console WriteLine( CB Foo ); class Test public static void InvokeFoo(CA ca) ca Foo(); public static void Main() InvokeFoo(new CB());
输出结果
CB Foo
在这个例子中 尽管在调用InvokeFoo()的时候 CB被转换成CA 但是当执行ca Foo的时候 仍然调用了CB的Foo 因为ca此时指向的是一个CB类型的对象 这种调用模式 我们称之为运行时绑定 因为在编译InvokeFoo时 编译器无法获取参数ca的真实类型 只有在运行的时候 才能根据ca的真实类型 决定调用哪一个函数
在这个例子中 两个关键字值得我们注意 首先是virtual 他告诉编译器 当前函数需要运行时绑定 其次是override 他告诉编译器 我要覆蓋基类中的Foo()
看到这里 可能读者会对两个问题持有疑惑
[问题]: 不用virtual结果如何?
[问题]: 不用override结果如何?
读者不妨自己动手修改上例 尝试这两个关键字的不同组合 看看输出的结果如何 在这里 我仅给出组合条件和其输出结果
序号 基类(CA)中是否有virtual 子类(CB)中是否有override 输出 是 是 CB Foo 是 否 CA Foo 否 是 编译错误 否 否 CA Foo
我希望通过对这组实验结果的解释 交待一些 NET中虚函数的相关概念
运行时绑定仅体现在虚函数中 因此在试验 中 输出的结果是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); // 输出
cha138/Article/program/net/201311/11712相关参考
认识.NET中的虚函数[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 面向对象的程序设计有
认识.NET中的虚函数[2] 以下文字资料是由(全榜网网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文