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继 ...
随机推荐
- css学习笔记 8
标准盒模型:盒子宽 = marginleft+borderleft+paddingleft+width+paddingright+borderright+marginright; 盒子高=margin ...
- html5对密码加密
今天找了几个关于对html5的密码加密的方法,仅供参考 1.base64加密:在页面中引入base64.js文件,调用方法为: <html> <head> <meta c ...
- JAVA08多态之课程问题解决
课后作业一:接口多态:使用接口代替抽象基类 1.源代码: package zoo4; import java.util.Vector; public class Zoo2 { public stati ...
- 查找增强出口和BADI程序
*&---------------------------------------------------------------------* *& Report Z_FIND_EX ...
- uva 10271 (dp)
题意:有n个数据,给定k,要从中选出k+8个三元组(x,y,z,其中x<=y<=z),每选一次的代价为(x-y)^2,求最小代价和. [解题方法] 将筷子按长度从大到小排序 排序原因: 由 ...
- MySql学习(四) —— 函数、视图
注:该MySql系列博客仅为个人学习笔记. 本篇博客主要涉及MySql 函数(数学函数.字符串函数.日期时间函数.流程控制函数等),视图. 一.函数 1. 数学函数 对于数学函数,若发生错误,所有数学 ...
- java selenium (一) selenium 介绍
Selenium 是目前用的最广泛的Web UI 自动化测试框架. 本系列文章,将深入简出来讲解selenium 的用法 文章的末尾处, 有整个系列的链接 阅读目录 selenium 的命名 sele ...
- Jaxb annotation使用
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反向 ...
- 前端面试题 之 JavaScript
昨天我们一起分享了关于html和css的面试题<前端面试题之Html和CSS>,今天我们来分享关于javascript有关的面试题.我面试的时候最害怕面试官问我js了,因为我真心不擅长这个 ...
- Visual Studio 2015中快捷键总结
今天总结了Visual Studio工具中常用的快捷键,可供平时参考查阅. 程序调试相关的快捷键F5: 启动调试Ctrl+F5: 开始执行(不调试)Shift+F5: 停止调试Ctrl+Shift+F ...