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继 ...
随机推荐
- cmd 常用指令
d: 进入d盘 cd xxx 进入某个目录
- beat your own python env
1,进入根目录,修改.bashrc,增加一个PATH目录 例如:alias cjtf='export PATH=/home/www/xxx/python_env:$PATH' 如果个人的机器的就不用a ...
- NGUI制作属于自己Button
1.收集一些PNG或PSD格式的button按钮图片(放在img文件夹下,全选) 2.选择需要制作button的图片,NGUI--Atlas Maker--Create,会出现三个命名一样的东西,1个 ...
- 51nod1305 Pairwise Sum and Divide
题目链接:51nod 1305 Pairwise Sum and Divide 看完题我想都没想就直接暴力做了,AC后突然就反应过来了... Floor( (a+b)/(a*b) )=Floor( ( ...
- 前端面试题2016--CSS
介绍一下标准的CSS的盒子模型?低版本IE的盒子模型有什么不同的? (1)有两种,IE 盒子模型.W3C 盒子模型:(2)盒模型:内容(content).填充(padding).边界(margin). ...
- wind取交易日历n day数据
days=AlldaysPeriod=Mw.tdaysoffset(5,'20171212','days=Tradingdays;Period=D')
- .Net Core 跨平台系列之环境部署
前言 作为一名.NET程序员,很多时候都会被什么拖控件.跨平台等字眼所鄙视过,但是在我的的内心还是没有把自己看低过.因为说到底,平台和语言只是我们吃饭的工具.很多时候公司的发展是取决于商业竞争的,微软 ...
- iOS 开发之控件快速学习(一)
最近一个朋友想转iOS所以我开始写一些初级iOS学习博客!也希望第一些初学的朋友有所帮助,!好吧进入今天的正题,我们今天主要完成如下界面的显示! 好的一起打开Xcode一下几步我截图说明:
- php上传文件类型
下面提供一张IE和火狐浏览器的文件类型对照表: ie 火狐 id 后缀名 php识别出的文件类型 0 gif image/gif 1 jpg image/jpeg 2 png image/png 3 ...
- C++中常见错误整理(不定期更新)
1.cannot have cv-qualifier 在C++中CV指const和volatile,非成员函数和静态成员函数不能有CV限定.