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#第七天的更多相关文章

  1. 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文

    阅读目录 前言 明确业务细节 建模 实现 结语 一.前言 上一篇我们已经确立的购买上下文和销售上下文的交互方式,传送门在此:http://www.cnblogs.com/Zachary-Fan/p/D ...

  2. CRL快速开发框架系列教程七(使用事务)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  3. 《LoadRunner12七天速成宝典》来了

    看到自己的新书又要发行了,算算从09年第一本书开始,不知不觉已经是第四本书了(帮朋友合写的书不算),每次写完之后都会说太累了,不想再写了,但是却又次次反悔,吞下食言的苦果.如果非要说第四本书的感受,那 ...

  4. 【SAP业务模式】之ICS(七):IDOC配置

    这是ICS业务模式系列的最后一篇了,主要讲解IDOC的配置. 一.指定EDI传输的供应商逻辑地址 事务代码:WEL1 注意:上面逻辑地址是生产公司+内部客户.有以下两种情形: 1.如果内部客户都是纯数 ...

  5. 我的MYSQL学习心得(七) 查询

    我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  6. Nodejs之MEAN栈开发(七)---- 用Angular创建单页应用(下)

    上一节我们走通了基本的SPA基础结构,这一节会更彻底的将后端的视图.路由.控制器全部移到前端.篇幅比较长,主要分页面改造.使用AngularUI两大部分以及一些优化路由.使用Angular的其他指令的 ...

  7. Go语言实战 - 网站性能优化第一弹“七牛云存储”

    由于用户纷纷反应山坡网的打开速度比较慢,所以两天前我们决定把服务器从linode迁移到阿里云. 整个迁移过程非常平滑,基本上一个小时就完成了.而且阿里云的配套设施提供的也很不错,运行状态监控什么的都有 ...

  8. redis成长之路——(七)

    扩展性封装 虽说现在StackExchange.Redis免费,万一到时候和servicestack.redis一样要收费呢,所以先留一口,后续的可以再处理 实例代码点击这里查看 redis成长之路- ...

  9. discuz接入七牛sdk

    自己摸索了几天,找群里面的人各种问,都没有一个人回答我,哎,国内的开源精神呢...... 需要修改有以下几个: 1.替换 /source/class/class_core.php 文件   解释:就 ...

  10. ITTC数据挖掘平台介绍(七)强化的数据库, 虚拟化,脚本编辑器

    一. 前言 好久没有更新博客了,最近一直在忙着找工作,目前差不多尘埃落定.特别期待而且准备的都很少能成功,反而是没怎么在意的最终反而能拿到,真是神一样的人生. 言归正传,一直以来,数据挖掘系统的数据类 ...

随机推荐

  1. trove instance service 总结

    def create(self, req, body, tenant_id): # TODO(hub-cap): turn this into middleware LOG.info(_LI(&quo ...

  2. abowman

    http://abowman.com/google-modules/ball-clock/

  3. ibaits的一个简单的完整的例子

    ibaits的简单介绍: iBatis 是apache 的一个开源项目,一个O/R Mapping(对象/关系映射) 解决方案,iBatis 最大的特点就是小巧,上手很快.如果不需要太多复杂的功能,i ...

  4. fork()子进程与waitpid()

    #!/usr/bin/perl use warnings; use strict; use POSIX ":sys_wait_h"; $SIG{CHLD} = sub{ my $p ...

  5. namenode无法启动

    查看日志错误信息关键语句: There appears to be a gap in the edit log.  We expected txid 44353, but got txid 原因: n ...

  6. iOS身份证号码识别

    一.前言   身份证识别,又称OCR技术.OCR技术是光学字符识别的缩写,是通过扫描等光学输入方式将各种票据.报刊.书籍.文稿及其它印刷品的文字转化为图像信息,再利用文字识别技术将图像信息转化为可以使 ...

  7. 【转】关于spring集合对象的补充

    <span style="font-size:18px;">关于spring集合对象的补充 spring2.0中对集合对象有了改进,新增了一个<util>标 ...

  8. ZZNU 1988: Sn

    题目描述 给你两个数 n, p(0 < n,p <= 10^15); a1 = 1;  a2 = 1+2;  a3 = 1+2+3;  ... an = 1+2+3+...+n    Sn ...

  9. gitignore git提交忽略文件

    从网上找的git忽略文件挺前面的,现在记录下来,以备后用: tomsuite.xml **pom.xml.releaseBackup release.properties gen */seed.txt ...

  10. L2-001. 紧急救援

    L2-001. 紧急救援 题目链接:https://www.patest.cn/contests/gplt/L2-001 Dijstra 本题是dijstra的拓展,在求最短路的同时,增加了不同的最短 ...