CLR如何调用虚方法、属性和事件

方法代表在类型或类型的实例上执行某些操作的代码。在类型上执行操作,称为静态方法;在类型的实例上执行操作,称为非静态方法。任何方法都有一个名称、一个签名和一个返回值(可以是void)。

CLR允许一个类型定义多个同名方法,只要每个方法都有一组不同的参数或者一个不同的返回值。所以,完全可以定义两个同名、同参数的方法,只要两者的返回类型不同。但是,除了IL汇编语言,我没有发现任何一个利用了这个“特点”的语言。大多数语言,在判断方法的唯一性是,除了方法名之外,都只以参数为依据,方法的返回类型会被忽略。

时间: 2024-10-10 02:03:35

CLR如何调用虚方法、属性和事件的相关文章

在基类构造器中调用虚方法需谨慎

最近,在基类的构造函数中调用虚方法时,发现了一个问题.先把问题重现如下: class Program { static void Main(string[] args) { var c = new Chinese(18); Console.ReadKey(); } } public class People { public int Age { get; protected set; } protected People() { this.Say(); } public virtual void

避免在构造函数中调用虚方法(Do not call overridable methods in constructors)

CLR中说道,不要在构造函数中调用虚方法,原因是假如被实例化的类型重写了虚方法,就会执行派生类型对虚方法的实现.但在这个时候,尚未完成对继承层次结构中所有字段的初始化.所以,调用虚方法会导致不可预测的行为.归根结底,这是由于调虚方法时,直到运行时之前,都不会选择执行该方法的实际类型. 在MSDN中,也给我我们详细的提示和范例. https://msdn.microsoft.com/en-us/library/ms182331.aspx 那我们就亲手来测试一下,新建两个类,Perople类,Chi

Partial(部分方法,局部方法),virtual(虚方法),abstract(抽象方法)

Partial 部分方法顾明思议是方法的一部分,不完整的,在ide编译时候,会将所有部分方法加载到一起统一编译,如果分部方法没有被实现,编译器就不会.对他们进行编译. 局部类型的限制 (1) 局部类型只适用于类.接口.结构,不支持委托和枚举.(2) 同一个类型的各个部分必须都有修饰符 partial.(3) 使用局部类型时,一个类型的各个部分必须位于相同的命名空间中.(4) 一个类型的各个部分必须被同时编译. 3. 局部类型的注意点 (1) 关键字partial是一个上下文关键字,只有和 cla

访问祖先类的虚方法(直接访问祖先类的VMT,但是这种方法在新版本中未必可靠)

访问祖先类的虚方法 问题提出 在子类覆盖的虚方法中,可以用inherited调用父类的实现,但有时候我们并不需要父类的实现,而是想跃过父类直接调用祖先类的方法. 举个例子,假设有三个类,实现如下: type TClassA = class procedure Proc; virtual; end; TClassB = class(TClassA) procedure Proc; override; end; TClassC = class(TClassB) procedure Proc; ove

虚方法与抽象方法有什么区别

抽象方法是只有定义.没有实际方法体的函数,它只能在抽象函数中出现,并且在子类中必须重写:虚方法则有自己的函数体,已经提供了函数实现,但是允许在子类中重写或覆盖. 重写的子类虚函数就是被覆盖了. 抽象方法 使用abstract关键字 public abstract bool Withdraw(-); 抽象方法是必须被派生类覆写的方法. 抽象方法是可以看成是没有实现体的虚方法 如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法 虚方法 使用virtual关键字 public

虚方法和抽象方法--基础回顾

抽象方法是只有定义.没有实际方法体的函数,它只能在抽象函数中出现,并且在子类中必须重写:虚方法则有自己的函数体,已经提供了函数实现,但是允许在子类中重写或覆盖.重写的子类虚函数就是被覆盖了. 抽象方法 使用abstract关键字 public abstract bool Withdraw(…); 抽象方法是必须被派生类覆写的方法. 抽象方法是可以看成是没有实现体的虚方法 如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法 虚方法 使用virtual关键字 public v

C# 方法 虚方法的调用浅谈 引用kdalan的博文

我们在面试中经常碰到有关多态的问题,之前我也一直被此类问题所困扰,闹不清到底执行哪个方法. 先给出一道简单的面试题,大家猜猜看,输出是? public class A    {        public void MethodF()         {             Console.WriteLine("A.F");         }        public virtual void MethodG()         {             Console.Wr

combobox 属性、事件、方法

一 .combobox 属性.事件.方法公共属性 名称 说明 AccessibilityObject 获取分配给该控件的 AccessibleObject. AccessibleDefaultActionDescription 获取或设置控件的默认操作说明,供辅助功能客户端应用程序使用. AccessibleDescription 获取或设置辅助功能客户端应用程序使用的控件说明. AccessibleName 获取或设置辅助功能客户端应用程序所使用的控件名称. AccessibleRole 获取

window属性、事件、方法一览

记录这个表格,是之前多次碰到一些不熟悉,或者从未使用过的事件来处理一些棘手问题时,总以为是新的浏览器特性,其实在一些老旧浏览器上,或者window上已经本身提供了一些事件绑定或者方法的调用. 最近正好在重写sugget/autocomplete的组件,一直以来比较棘手的问题解决是当鼠标焦点离开<input>时,而刚好在suggest的列表浮层上触发click时,处理显得比较麻烦,以前较为常规的解决方案是采用delay这种方式来延迟事件上下文的处理,往往在定义delayTime的时候比较折腾,需