//经常讲到继承、重载,但还是有人概念比较模糊,因此想写个例子加深理解
interface ILog
{
void WriteLine(string message);
} class LogBase : ILog
{
public virtual void WriteLine(string message)
{
Debug.WriteLine(message);
}
} class A : LogBase
{
public override void WriteLine(string message)
{
base.WriteLine("A:" + message);
}
} class C : A
{
public override void WriteLine(string message)
{
base.WriteLine("C:" + message);
}
} class D : A
{
public override void WriteLine(string message)
{
Debug.WriteLine("D:" + message);
}
} //看清楚各个类的关系,开始测试,高手请飘过
//请不要去调试,看看自己有没有掌握
//问题1:输出1-6的结果是什么?
//问题2:Main函数中创建了多少个对象?
//问题3:cBase这个变量的类型是什么?
class Program
{
static void Main(string[] args)
{
//重载
ILog log = null;
log = new A();
log.WriteLine("测试重载"); //输出1 LogBase logBase = (LogBase)log;
logBase.WriteLine("测试重载");//输出2 var c = new C();
var d = new D();
c.WriteLine("测试重载");//输出3
d.WriteLine("测试重载");//输出4 //强制转换
LogBase cBase = TryGetValue(()=> (LogBase)(ILog)c);
LogBase dBase =TryGetValue(()=> (LogBase)(C)(ILog)d); log.WriteLine(cBase == null ? "null" : "cBase");//输出5
log.WriteLine(dBase == null ? "null" : "dBase");//输出6 //这句是为第三个问题准备的,结果就是答案
log.WriteLine(cBase.GetType().ToString());
} //尝试执行函数,如果不能执行,返回null
static T TryGetValue<T>(Func<T> func) where T:class
{
try
{
return func();
}
catch
{
return null;
}
}
}

看答案之前,再来引入一个故事作为拓展,借用部门老大的名,XX总监、我们老大、最牛的人..., 你看就一个人,但是有很多的名字,程序里就是有很多的角色或者说访问接口

下面是答案,选中背景色不一样就可以看

问题1的输出结果: A:测试重载 A:测试重载 A:C:测试重载 D:测试重载 A:cBase A:null

问题2:因为只看到3个new,所以是3个对象,当然这个说法不全对;

问题3:一个对象,不管你把它当什么,它还是它自己,所以cBase还是c;

C#面向对象概念之继承的更多相关文章

  1. Lua面向对象----类、继承、多继承、单例的实现

    (本文转载)学习之用,侵权立删! 原文地址   http://blog.csdn.net/y_23k_bug/article/details/19965877?utm_source=tuicool&a ...

  2. [.net 面向对象编程基础] (12) 面向对象三大特性——继承

    [.net 面向对象编程基础] (12) 面向对象三大特性——继承 上节我们说了面向对象的三大特性之一的封装,解决了将对同一对象所能操作的所有信息放在一起,实现统一对外调用,实现了同一对象的复用,降低 ...

  3. delphi 基础之二 面向对象概念初步

    面向对象概念初步 •类自动生成 快捷键:ctrl+shift+c 1.类的定义 类是用户创建的数据类型,包括状态.表达式和一些操作.有3个组成部分,即字段.方法和属性.字段是类的内部数据变量,方法就是 ...

  4. JavaScript面向对象中的继承

    1.1继承的基本概念 使用一个子类,继承另一个父类,那么子类可以自动拥有父类中的所有属性和方法,这个过程叫做继承. >>>继承的两方,发生在两个类之间. 实现继承的三种方式: 扩展O ...

  5. Python3 与 C# 面向对象之~继承与多态 Python3 与 C# 面向对象之~封装 Python3 与 NetCore 基础语法对比(Function专栏) [C#]C#时间日期操作 [C#]C#中字符串的操作 [ASP.NET]NTKO插件使用常见问题 我对C#的认知。

    Python3 与 C# 面向对象之-继承与多态   文章汇总:https://www.cnblogs.com/dotnetcrazy/p/9160514.html 目录: 2.继承 ¶ 2.1.单继 ...

  6. OOP面向对象 三大特征 继承封装多态

    OOP面向对象 ----三大特征 继承封装多态 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构 ...

  7. Python面向对象三要素-继承(Inheritance)

    Python面向对象三要素-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承概述 1>.基本概念 前面我们学习了Python的面向对象三 ...

  8. java面向对象3-继承(继承、抽象类、抽象接口)

    4.继承 面向对象概念-类与对象的关系 封装:指隐藏对象的属性和实现细节,仅对外提供公共访问方式,private-构造方法/构造器-this关键字-static关键字(javadoc制作工具类) -代 ...

  9. JS中面向对象中的继承(常用写法)---核心部分

    1.基本概念 子类继承父类,但是不能影响父类.包括1.混合继承(构造函数+原型) 2.ES6新增class的继承. 接下来介绍,面向对象中继承的两种常用写法.即混合继承(构造函数+原型)和class继 ...

随机推荐

  1. document.all.wb.ExecWB

      <%@ page language="java" pageEncoding="UTF-8"%>   <%@ taglib uri=&quo ...

  2. php知识案列分享

    今天再跟大家分享一下,以下案列. 使用array_flip函数生成随机数,可以去掉重复值. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 < ...

  3. IIS部署WCF网站服务步骤

    一开始在“管理工具”下找不到IIS的快捷方式,是因为系统默认未打开IIS功能,所以首先打开IIS功能: 为避免出现未知的麻烦,建议将IIS下的所有项都勾上: 创建IIS桌面快捷方式: 添加网站托管: ...

  4. linux 硬盘速度测试

    [root@iZ25oat874uZ data]# time dd if=/dev/zero of=/var/test bs=8k count=1000000 1000000+0 records in ...

  5. [教训] windows 电脑的垃圾文件清理...

    坑你没商量! 这个名叫 “清除系统垃圾.bat“ 的文件在网上传播很广,但是,却出现了错误的版本,如果按照它逐条执行,将导致系统文件夹被一锅端,只能再重装的悲剧! 举个栗子: 错误版本:http:// ...

  6. Tomcat服务器配置

    安装好jdk以后,首先到apache官网(http://tomcat.apache.org/)下载tomcat,安装到F盘,本人下载的版本为:apache-tomcat-7.0.55 修改环境变量 找 ...

  7. jquery.qrcode 生成二维码带logo

    <div id="container">这里是二维码显示位置</div> <script language="JavaScript" ...

  8. Android中的Service小结

    简介 Service适合执行不需要和用户交互,而且长期运行的任务.即使程序被切换回后台,服务仍然可以正常运行.Service并不自动开启线程,默认运行在主线程中. Service中需要重载的函数 on ...

  9. html页面清除缓存

    需求:页面每次打开时清除本页面的缓存. 页面打开时,由于缓存的存在,刚刚更新的数据有时无法在页面得到刷新,当这个页面作为模式窗口被打开时问题更为明显. 解决办法为: (1) 用HTML标签设置HTTP ...

  10. windows8.1下javaweb环境搭建及基本配置(jdk+tomcat+eclipse)

    1.下载安装jdk在无空格的路径下,否则在linux下可能出问题.配置环境变量: a.新建系统变量——JAVA_HOME,值——D:\programming\java\jdk8 // win8下若建为 ...