C#第七天
一
1.继承:我们可能会在一些类中,写一些重要的成员,将这些重复的成员单独的封装到一个类中,作为这些类的父类。
Student Teacher Driver 子类 也叫派生类
Person 父类 也叫基类
子类继承了父类,那么子类从父类那里继承过来了什么
首先,子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。
2.子类不能继承父类的构造函数,但是,子类会默认的调用父类无参数的构造函数,创建父类对象,让子类可以使用父类中的成员。
所以,如果父类中重新写了一个有参数的构造函数之后,那么无参数的就被干掉了。
子类就掉用不到了,所以子类会报错。
解决方法:
1.在父类中重新写一个无参数的构造函数。
2.在子类中显示父类的构造函数,使用关键字:base()
3.继承的特性
1).继承的单根性:一个子类只能继承继承一个父类。
2).继承的传递性。
4. object是所有类的基类。
5.new关键字
1)、创建对象
2)、隐藏从父类那里继承过来的同名成员。
隐藏的后果就是子类调用不到父类的成员。
二
里氏转换法:
1、里氏转换
1)、子类可以赋值给父类
2)、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象。
2、
子类对象可以调用父类中的成员,但是父类对象永远都只能调用自己的成员。
3、
is:表示类型转换,如果能够转换成功,则返回一个true,否则返回一个false
as:表示类型转换,如果能够转换则返回对应的对象,否则返回一个null
static void Main(string[] args)
{
//1、里氏转换
//1)、子类可以赋值给父类,如果有一个地方需要父类作为参数,我们可以给一个子类来代替
//Student s = new Student();
//Person p = s;
Person p = new Student();
//string str = string.Join("|", new string[]{"1","2","3","4"});
//Console.WriteLine(str);
//Console.ReadKey();
//2)、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象。
//if (p is Student)
//{
// Student ss = (Student)p;
// ss.StudentSayHello(); //}
//else
//{
// Console.WriteLine("转换失败");
//}
//as用法
Student t=p as Student;
t.StudentSayHello(); Console.ReadKey();
}
public class Person
{
public void PersonSayHello()
{
Console.WriteLine("我是父类");
}
}
public class Student : Person
{
public void StudentSayHello()
{
Console.WriteLine("我是学生");
}
}
public class Teacher:Person
{
public void TeacherSayHello()
{
Console.WriteLine("我是老师");
}
}
里氏转换小练习:
namespace 里氏转换法练习
{
class Program
{
static void Main(string[] args)
{
//创建一个对象,通过一个循环,来调用他们打招呼的方法
//Student s = new Student();
//Person p = new Person();
//ShuaiGuo sg = new ShuaiGuo();
Person[] pers = new Person[];
Random r = new Random();
for (int i = ; i < pers.Length; i++)
{
int rNumber = r.Next(, );//产生一个1-6的随机数;
switch (rNumber)
{
case : pers[i] = new Student();
break;
case : pers[i] = new Teacher();
break;
case : pers[i] = new ShuaiGuo();
break;
case : pers[i] = new MeiNv();
break;
case : pers[i] = new YeShou();
break;
case : pers[i] = new Person();
break;
}
}
for (int i = ; i < pers.Length; i++)
{
if (pers[i] is Teacher)
{
((Teacher)pers[i]).TeacherSayHi();
}
else if (pers[i] is YeShou)
{
((YeShou)pers[i]).YeShouSayHi();
}
else if (pers[i] is MeiNv)
{
((MeiNv)pers[i]).MeiNvSayHi();
}
else if (pers[i] is Student)
{
((Student)pers[i]).StudentSayHi();
}
else if (pers[i] is ShuaiGuo)
{
((ShuaiGuo)pers[i]).ShuaiGuoSayHi();
}
else
{
pers[i].PersonSayHi();
}
}
Console.ReadKey();
} }
public class Person
{
public void PersonSayHi()
{
Console.WriteLine("我是人类");
}
}
public class Student : Person
{
public void StudentSayHi()
{
Console.WriteLine("我是学生");
}
}
public class Teacher : Person
{
public void TeacherSayHi()
{
Console.WriteLine("我是老师");
}
}
public class MeiNv : Person
{
public void MeiNvSayHi()
{
Console.WriteLine("我是美女");
}
}
public class ShuaiGuo : Person
{
public void ShuaiGuoSayHi()
{
Console.WriteLine("我是帅锅");
}
}
public class YeShou : Person
{
public void YeShouSayHi()
{
Console.WriteLine("我是菜狗");
}
}
}
C#第七天的更多相关文章
- 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文
阅读目录 前言 明确业务细节 建模 实现 结语 一.前言 上一篇我们已经确立的购买上下文和销售上下文的交互方式,传送门在此:http://www.cnblogs.com/Zachary-Fan/p/D ...
- CRL快速开发框架系列教程七(使用事务)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 《LoadRunner12七天速成宝典》来了
看到自己的新书又要发行了,算算从09年第一本书开始,不知不觉已经是第四本书了(帮朋友合写的书不算),每次写完之后都会说太累了,不想再写了,但是却又次次反悔,吞下食言的苦果.如果非要说第四本书的感受,那 ...
- 【SAP业务模式】之ICS(七):IDOC配置
这是ICS业务模式系列的最后一篇了,主要讲解IDOC的配置. 一.指定EDI传输的供应商逻辑地址 事务代码:WEL1 注意:上面逻辑地址是生产公司+内部客户.有以下两种情形: 1.如果内部客户都是纯数 ...
- 我的MYSQL学习心得(七) 查询
我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...
- Nodejs之MEAN栈开发(七)---- 用Angular创建单页应用(下)
上一节我们走通了基本的SPA基础结构,这一节会更彻底的将后端的视图.路由.控制器全部移到前端.篇幅比较长,主要分页面改造.使用AngularUI两大部分以及一些优化路由.使用Angular的其他指令的 ...
- Go语言实战 - 网站性能优化第一弹“七牛云存储”
由于用户纷纷反应山坡网的打开速度比较慢,所以两天前我们决定把服务器从linode迁移到阿里云. 整个迁移过程非常平滑,基本上一个小时就完成了.而且阿里云的配套设施提供的也很不错,运行状态监控什么的都有 ...
- redis成长之路——(七)
扩展性封装 虽说现在StackExchange.Redis免费,万一到时候和servicestack.redis一样要收费呢,所以先留一口,后续的可以再处理 实例代码点击这里查看 redis成长之路- ...
- discuz接入七牛sdk
自己摸索了几天,找群里面的人各种问,都没有一个人回答我,哎,国内的开源精神呢...... 需要修改有以下几个: 1.替换 /source/class/class_core.php 文件 解释:就 ...
- ITTC数据挖掘平台介绍(七)强化的数据库, 虚拟化,脚本编辑器
一. 前言 好久没有更新博客了,最近一直在忙着找工作,目前差不多尘埃落定.特别期待而且准备的都很少能成功,反而是没怎么在意的最终反而能拿到,真是神一样的人生. 言归正传,一直以来,数据挖掘系统的数据类 ...
随机推荐
- Fedora25
Fedora默认情况是没有装flash的,首先输入https://get.adobe.com/flashplayer/?loc=cn,选择.rpm包,点击立即下载,下载完成后进到download目录, ...
- Ecstore启用www.ecstore.com和m.ecstore.com域名
Ecstore启用www.ecstore.com和m.ecstore.com域名 修改config/mapper.php if($_SERVER['SERVER_NAME']=='www.ecstor ...
- ios 开发证书 appids 描述文件关系
当你准备进行真机测试或者发布应用到App Store上去的时候, 免不了要申请相应的证书.(Development--测试证书. Distribution--发布证书) 进入证书管理相应网站https ...
- Centos6.5环境中安装vsftp服务
1.检查vsftp是否安装 命令:rpm -qa|grep vsftpd 若已经安装,则显示相关的版本信息,否则什么也没有. 也可以输入find -name "vsftpd" -p ...
- apache 修改连接数(转)
1.先要修改最大连接数,必须了解Apache的MPM(Multi -Processing Modules,多道处理模块)Apache2.0中MPM分为3种(perfork.worker.event). ...
- Windows漏洞利用与防护(2015.8)
Windows平台下的漏洞利用与防护 0x00 概述 在过去的二十几年,Windows作为网络安全的主战场之一,攻于防的较量从未停息过.内存破坏漏洞作为研究的重点之一,经历了很多的发展也沉淀了前辈们许 ...
- 写入XML文件
public static void writeXMLFile(Document doc,String xmlFileName) throws IOException{ OutputFormat f ...
- js构造函数的完美继承(欢迎吐槽)
function Animal(){ //定义父类 this.leibie="动物"; } Animal.prototype.test1=[1,2]; function Cat(n ...
- stm32 串口乱码的解决
版权声明:本文为博主原创文章. 前几天在中移物联网申请了一个迷你开发板,运行官方提供的程序,感觉板子是正常的.但是自己写的程序能够刷到板子上,但是串口却是乱码.官方和我的额程序都是用的库函数的方式写的 ...
- Arrar.prototype.map()的用法
---恢复内容开始--- map() 方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组. array.map(callback[, thisArg]) 注:[]在语法中[]内的内 ...