C#面向对象概念之继承
//经常讲到继承、重载,但还是有人概念比较模糊,因此想写个例子加深理解
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#面向对象概念之继承的更多相关文章
- Lua面向对象----类、继承、多继承、单例的实现
(本文转载)学习之用,侵权立删! 原文地址 http://blog.csdn.net/y_23k_bug/article/details/19965877?utm_source=tuicool&a ...
- [.net 面向对象编程基础] (12) 面向对象三大特性——继承
[.net 面向对象编程基础] (12) 面向对象三大特性——继承 上节我们说了面向对象的三大特性之一的封装,解决了将对同一对象所能操作的所有信息放在一起,实现统一对外调用,实现了同一对象的复用,降低 ...
- delphi 基础之二 面向对象概念初步
面向对象概念初步 •类自动生成 快捷键:ctrl+shift+c 1.类的定义 类是用户创建的数据类型,包括状态.表达式和一些操作.有3个组成部分,即字段.方法和属性.字段是类的内部数据变量,方法就是 ...
- JavaScript面向对象中的继承
1.1继承的基本概念 使用一个子类,继承另一个父类,那么子类可以自动拥有父类中的所有属性和方法,这个过程叫做继承. >>>继承的两方,发生在两个类之间. 实现继承的三种方式: 扩展O ...
- 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.单继 ...
- OOP面向对象 三大特征 继承封装多态
OOP面向对象 ----三大特征 继承封装多态 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构 ...
- Python面向对象三要素-继承(Inheritance)
Python面向对象三要素-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承概述 1>.基本概念 前面我们学习了Python的面向对象三 ...
- java面向对象3-继承(继承、抽象类、抽象接口)
4.继承 面向对象概念-类与对象的关系 封装:指隐藏对象的属性和实现细节,仅对外提供公共访问方式,private-构造方法/构造器-this关键字-static关键字(javadoc制作工具类) -代 ...
- JS中面向对象中的继承(常用写法)---核心部分
1.基本概念 子类继承父类,但是不能影响父类.包括1.混合继承(构造函数+原型) 2.ES6新增class的继承. 接下来介绍,面向对象中继承的两种常用写法.即混合继承(构造函数+原型)和class继 ...
随机推荐
- 11.10 Taolu1234组信息汇总
团队名称: Taolu1234 团队选题: <餐厅到店点餐系统>WEB版 团队博客地址: http://www.cnblogs.com/queenjuan/ 团队GITHUB地址: htt ...
- 由于客户端检测到一个协议错误 代码0x1104
重新连接N次都还是这个错误提示,最后再重起电脑,还是没用.研究了一下错误终于解决了. 首先检查远程连接端口对不对?Windows远程默认的连接端口是3389,一般大家连接时直接输入IP或域名就可以连接 ...
- jquery 基础-Ajax应用
使用load()方案异步请求数据 调用格式:load(url,[data],[callback]) 参数url为加载服务器地址,可选项data参数为请求时发送的数据,callback参数为数据请求成功 ...
- @Transactional 事务管理
全面分析 Spring 的编程式事务管理及声明式事务管理 事务传播行为 所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为.在Tra ...
- ARM: STM32F7: hardfault caused by unaligned memory access
ARM: STM32F7: hardfault caused by unaligned memory access ARM: STM32F7: 由未对齐的内存访问引起的hardfault异常 Info ...
- Linux下搭建DNS服务器
1. 安装需要的软件 由于实验过程是在自己电脑进行的,所以需要安装bind bind-chroot,以下为安装过程. 图1-1 安装bind 图1-2 安装bind-chroot 2.修改DNS主配置 ...
- KETTLE 配置资源库
KETTLE 是一款开源的ETL工具,通过图形界面进行设计,可以对数据进行转换.设计好的文件分为两类,一类是trans,一类是job,这些文件可以存储到文件系统中. 也可以存储到数据库中. 如 ...
- UIDatePicker和UIToolbar的使用
功能,用UIDatePicker 和UIToolbar 实现点击文本框弹出日期选择空间. 点击确定按钮获取时间显示到对应的Text Field里面,点击取消按钮隐藏键盘. 1.创建textField控 ...
- Sql 获取向上取整、向下取整、四舍五入取整的实例
[四舍五入取整截取] select round(54.56,0) [向下取整截取] SELECT FLOOR(54.56) [向上取整截取] SELECT CEILING(13.15) --MS ...
- Pyunit测试框架
一.概述 本系列主要解决的问题是“接口自动化测试”,选择的测试语言是 python 脚本语言.截至目前为止,python是公认的最好的用于自动化应用的语言之一 二.PyUnit测试框架 使用 pyth ...