c#面向对象机制的进一步理解
今天看到一个面试题很有意思:
namespace EventTest
{
class Program
{
static void Main(string[] args)
{
A a = new C();
a.Show();
Console.ReadKey();
}
}
public class A
{
public virtual void Show()
{
Console.WriteLine("A");
}
}
public class B : A
{
public new virtual void Show()
{
Console.WriteLine("B");
}
}
public class C : B
{
public override void Show()
{
Console.WriteLine("C");
}
}
}
输出结果为 A
class Program
{
static void Main(string[] args)
{
A a = new C();
a.Show();
Console.ReadKey();
}
}
public class A
{
public virtual void Show()
{
Console.WriteLine("A");
}
}
public class B : A
{
public override void Show()
{
Console.WriteLine("B");
}
}
public class C : B
{
public new void Show()
{
Console.WriteLine("C");
}
}
}
输出结果为 B
结论:用类C实例化A时,a根据虚函数的机制首先查看基类A是否由此虚方法,如果有看其派生类B是否重写,如果没有重写(第一种情形)就访问基类的方法
返回A,如果B已经重写(第二种情形)则查看B,同理B查看器派生类C看其是否重写,如果重写调用C,如果没有调用B.
c#面向对象机制的进一步理解的更多相关文章
- java反射机制的进一步理解
承上一篇. JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为java语 ...
- Java内存管理的进一步理解-模拟过程图解
Java内存管理的进一步理解-模拟过程图解--转载 java的内存管理分为: 1.堆内存:2.栈内存:3.方法区:4.本地方法区 /* 1:方法区 方法区存放装载的类数据信息包括: ...
- PHP autoload与spl_autoload自动加载机制的深入理解
PHP autoload与spl_autoload自动加载机制的深入理解 作者: 字体:[增加 减小] 类型:转载 时间:2013-06-05我要评论 本篇文章是对PHP中的autoload与spl_ ...
- [开发技巧]·Numpy广播机制的深入理解与应用
[开发技巧]·Numpy广播机制的深入理解与应用 1.问题描述 我们在使用Numpy进行数据的处理时,经常会用到广播机制来简化操作,例如在所有元素都加上一个数,或者在某些纬度上作相同的操作.广播机制很 ...
- 对于python装饰器结合递归的进一步理解
对于python装饰器结合递归的进一步理解 代码如下: import functools def memoize(fn): print('start memoize') known = dict() ...
- DOM事件机制进一步理解
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- Android中的Binder机制的简要理解
转载自:http://www.linuxidc.com/Linux/2012-07/66195.htm http://blog.csdn.net/sunxingzhesunjinbiao/articl ...
- 关于阮一峰老师es6(第三版)中管道机制代码的理解浅析
最近正在学习阮一峰老师的es6(第三版)教材,在学到第七章<函数的扩展>中的箭头函数嵌套时,文中提到了一个关于“管道机制”的示例,文中源代码如下: //es6(第三版)教材中的管道机制源代 ...
- 对epoll机制的学习理解v1
epoll机制 wrk用非阻塞多路复用IO技术创造出大量的连接,从而达到很好的压力测试效果.epoll就是实现IO多路复用的关键. 本节是对epoll的本质的学习总结,进一步的参考资料为: <深 ...
随机推荐
- Oracle导入SQL脚本执行 scott 用户下的表删除了
执行 .sql 文件时,应在 sqlplus 或 cmd 中执行,速度比plsql 中的command window 中书许多, scott 用户下的表删除了 可以执行如下 @D:\app\Admi ...
- JavaScript基础笔记一
一.真假判断 真的:true.非零数字.非空字符串.非空对象 假的:false.数字零.空字符串.空对象.undefined 例: if(0){ alert(1) }else{ alert(2) } ...
- white-space:nowrap 的妙用
对于多个元素同在同一行的布局,如比较常见的是轮播.下面我将探讨这这一布局的做法: 首先约定html结果如下: div.row div.col div.col div.col ... 做法一: 设定di ...
- HDOJ2029Palindromes _easy version
Palindromes _easy version Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- jQuery之手风琴图片
<!DOCTYPE HTML> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- Android手机播放电脑视频文件-屌丝必备
今天早上一到办公室,照常打开博客园看文章,看到有一片文章是用 http://www.cnblogs.com/wdfrog/p/3738180.html 看到这哥们实现的方法好复杂,又是配置电脑端,又 ...
- Web 服务器上的请求筛选被配置为拒绝该请求,因为查询字符串过长
get请求方式中,传递的参数的值不能太多.是有长度限制的. http://test.jz.gaitu.cn:80/appMana/TemplateImgOutput.aspx?TemplateID=1 ...
- AjaxPro使用方法
无意中看到同事用AjaxPro用,看到很不错,特长是前后台传输数据特别方便. 最好的教材就是拿到就可以用,方便大家. 以前数据传输用FORM提交,或者在前台用JASON拼接然后通过AJAX方式提交.总 ...
- 在WCF中使用Flag Enumerations
请看MSDN示例: [DataContract][Flags] public enum CarFeatures { None = 0, [EnumMember] AirCo ...
- nodejs包管理
包管理 :npm cnpm yarn Node Package Manager node的包管理工具 cls清除控制台 npm install jquery 下载依赖包 就自动下载最新版本的jq np ...