分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

ASP.NET之虚方法

发布时间:2023-09-06 02:31责任编辑:胡小海关键词:.NET

1.虚方法关键字?

   Virtual

2.虚方法运行的周期?

      虚函数在编译期间是不被静态编译的,它的相对地址是不确定的,它会根据运行时对象实例来动态判断要调用的函数,其中那个申明时定义的类叫申明类,执行实例化的那个类叫做实例类。

3.函数运行的检查流程:

      1当调用一个对象的函数时,系统会直接去检查这个对象的申明定义的类(申明类),检查调用的函数是否为虚函数,如果不是虚函数,那么它就执行该函数。而如果有Viirtual关键字(虚函数),那么它

就不会立即执行该函数。而是转去检查对象的实例类。在这个实例类里,它会检查这个实例类中是否有重现实现该函数(Override),如果有就不再找了,马上执行该实例类中的这个重新实现的函数

而如果每天有,系统就会不停的往上找实例类,直到找到第一个重载了该函数的父类为止,然后执行父类里重载后的的函数

另注意:虚函数里必须有方法体。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleHelp{ ?public ?class RunVirtual ???{ ?????/// <summary> ?????/// 虚方法说明以及代码 ?????/// </summary> ?????public void TestRunVirtual() { ?????????//注意:虚方法不允许static, abstract, 或override 修饰符 ?????????TestA A;// 定义一个a这个A类的对象.这个A就是a的申明类 ?????????TestA B;// 定义一个b这个A类的对象.这个A就是b的申明类 ?????????TestA C;// 定义一个c这个A类的对象.这个A就是b的申明类 ?????????TestA D;// 定义一个d这个A类的对象.这个A就是b的申明类 ?????????A = new TestA();// 实例化a对象,A是a的实例类 ?????????B = new TestB();// 实例化b对象,B是b的实例类 ?????????C = new TestC();// 实例化b对象,C是b的实例类 ?????????D = new TestD();// 实例化b对象,D是b的实例类 ?????????A.Fuctio();//先检查声明类A,发现是虚函数,跳出检查实例类即为本身,执行A的Fuctio方法 ?????????B.Fuctio();//先检查声明类A,发现是虚函数,跳出检查实例类,实例类B中有重写,执行重写方法Fuctio ?????????C.Fuctio();//先检查声明类A,发现是虚函数,跳出检查实例类,实例类C中没有重写,找父类B(继承了B类),执行B类中重写方法Fuctio ?????????D.Fuctio();//先检查声明类A,发现是虚函数,跳出检查实例类,实例类D中虽然有声明了Fuctio方法,但并没有重写Fuction,找父类A,发现为本身,执行A类的Fuctio ???????????} ???}}

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleHelp{ ?public ?class TestA ???{ ?????public virtual void Fuctio() { ?????????Console.Write("Fuction in A"); ?????} ?????????} ?public ?class TestB:TestA { ?????public override void Fuctio() ?????{ ?????????Console.Write("Fuction in B"); ?????} ?} ?public class TestC : TestB { ?} ?public class TestD : TestA { ?????public void Fuctio() { ?????????Console.Write("Fuction in D"); ?????} ?}}
 

ASP.NET之虚方法

原文地址:https://www.cnblogs.com/JohnTang/p/10325894.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved