A a =new B(); 其中A是申明类,B是实例类。
1.当调用一个对象的函数时,系统会直接去检查这个对象申明定义的类,即申明类,看所调用的函数是否为虚函数;
2.如果不是虚函数,那么它就直接执行该函数。而如果是一个虚函数,那么这个时候它就不会立刻执行该函数了,而是开始检查对象的实例类。
3.在这个实例类里,他会检查这个实例类的定义中是否有实现该虚函数或者重新实现该虚函数(通过override关键字)的方法,
如果有,它就不会再找了,而是马上执行该实例类中实现的虚函数的方法。而如果没有的话,系统就会不停地往上找实例类的父类,
并对父类重复刚才在实例类里的检查,直到找到第一个重载了该虚函数的父类为止,然后执行该父类里重载后的函数。
class father( ){
public virtual void tellName(){
Console.WriteLine("I am father");
}
}
class son(){
public override void tellName(){
Console.WriteLine("I am son");
}
}
father a = new son();
a.tellName();
父类的引用指向子类的对象,执行过程如下:
1.先检查申明类father 2.检查到是虚拟方法 3.转去检查实例类son,有重写的方法 4.执行实例类B中的方法 5.输出结果 I am son;
分享到:
相关推荐
.NET框架是微软开发的一种开发平台,它包含了丰富的编程...这些是.NET基础知识的总结,涵盖了C#编程语言的基本概念、类型系统、面向对象特性以及常见的程序设计模式。理解和掌握这些知识点对于进行.NET开发至关重要。
- **覆盖(Override)**:在面向对象编程中,子类可以覆盖(或重写)父类的虚函数,这是实现多态的一种方式。覆盖发生在运行时,当父类的引用指向子类对象时,实际调用的是子类覆盖后的方法。例如: ```csharp ...
- 多态性允许父类的引用指向子类的对象。 - 虚方法和覆盖方法实现了运行时的多态。 - **14.3 抽象与密封** - 抽象类不能被实例化,但可以被继承。 - 密封类不能被继承。 - **14.4 继承中关于属性的一些问题** -...
【.NET面试题详解】 ...以上是对.NET面试题的一些关键知识点的详细解释,涵盖了基础概念、数据访问、对象模型、程序设计等多个方面。在面试准备时,深入理解和实践这些内容将有助于提高面试表现。
这意味着类实例存储的是一个指向对象的引用,而结构则直接存储数据。 - 类支持继承,而结构不支持。 - 类可以有无参数构造函数,而结构不可以。 - 结构中的字段不能有实例初始化,而类可以。 - 类可以有析构函数...
根据提供的文件信息,我们可以整理出一系列与.NET面试相关的知识点,这些知识点主要涵盖了.NET的基本概念、C#编程语言特性以及ASP.NET应用开发等几个方面。下面将详细解释这些知识点: ### 1. C#中的基本类型转换 -...
### C#编程指南知识点概述 #### 一、C#语言和.NET Framework介绍 - **C#语言简介**:C#是一种面向对象的编程语言,由微软设计并开发,旨在为.NET平台提供一种强大的编程工具。它结合了C++的强大功能与Visual Basic...
**2.6 虚函数和抽象类** - **虚函数**: 可以被派生类重写的函数。 - **纯虚函数**: 只声明不实现,用于强制派生类必须实现该函数。 - **抽象类**: 包含纯虚函数的类,不能实例化。 **2.7 模板** - **模板类**: 可以...
此外,C#还支持跨平台特性,并且是.NET Framework和.NET Core的主要编程语言之一。 - **面向对象的简介**:面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,其核心思想是将程序设计围绕对象展开...