继承概念
  承用于创建可重用、扩展和修改在其他类中定义的行为的新类
  创建一个类的时候,不是要写全新的数据成员和成员函数,可以指定新的类继承一个已经存在的类的成员。已有的类称为基类,新的类称为派生类
  派生类只能有一个直接基类,但一个基类可以有多个直接派生类
  例如ClassAnimal派生出ClassMammals,ClassMammals派生出ClassHuman,则ClassHuman会继承ClassMammals和ClassAnimal中声明的成员

继承特点
  派生类是对基类的扩展,派生类可以添加新的成员,但不能移除已经继承的成员的定义
  继承是可以传递的。如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中声明的成员
  Object类是所有类的基类。C#中的类都直接的或者间接的从Object类继承
  构造函数和析构函数不能被继承,除此之外其他成员能被继承。基类中成员的访问方式只能决定派生类能否访问它们。
  派生类如果定义了与继承而来的成员同名的新成员,那么就可以覆盖已继承的成员,但这兵不是删除了这些成员,只是不能再访问这些成员
  类可以定义虚方法、虚属性及虚索引指示器,它的派生类能够重载这些成员,从而使类可以展示出多态性
  派生类只能从一个类中继承,可以通过接口来实现多重继承

基本语法

 class MyClass : BaseClass
{
// 方法体
}

  如果在类定义中没有指定基类,默认System.Object是基类

虚方法
  将一个基类函数声明为virtual,则在任何一个派生类中可以重写该函数

 clss BaseClass
{
public virtual void VirtualMethod()
{
// 方法体
}
}

在派生类中使用override重写函数

 class MyClass :BaseClass
  {
    public override void VirtualMethod()
    {
      // 方法体
    }
  }

将属性声明为virtual

 public virtual string Name
{
  get;set;
}

隐藏方法
  在没有声明virtual和override的情况下,签名相同的方法在基类和派生类中都进行了声明
  在派生类方法中会隐藏基类方法
  但是隐藏方法会造成对于给定类的实例调用错误的方法
  C#语法在编译时会收到这个潜在错误的警告
  所以要隐藏一个方法时用new关键字声明,会避免编译时就发出警告错误

 class ClassBase
{
  public void BaseMethod()
  {
    // 方法体
  }
} class MyClass : ClassBase
{
  public new void MyClass()
  {
     // 方法体
  }
}

抽象类
  C#允许把类和函数声明为abstract
  抽象类不能实例化,而抽象不能直接实现,必须在非抽象的派生类中重写
  如果类包含抽象函数,则该类也是抽象的,也必须声明为抽象的
  抽象类中不能声明非抽象方法,但可以声明其它的非抽象成员
  抽象类语法:  

 abstract class MyClass
{
  public abstract void MyMethod();
}

  抽象方法没有实现,所以方法定义后面是分号,而不是常规的方法块
  抽象类的派生类必须实现所有抽象方法
  当抽象类从基类继承虚方法时,抽象类可以使用抽象方法重写该虚方法

密封类和类成员
  密封类的声明是在类定义前面放置关键字 sealed
  密封类不能用作基类 
  密封类禁止派生
  在对基类的虚成员进行重写的派生类上的类成员、方法、字段、属性或事件可以将该成员声明为密封成员
  方法是在类成员声明中将sealed关键字置于override关键字的前面

 public sealed class ClassSealed
{
// 属性,方法
} public class ClassSunSealed : ClassSealed
{
public sealed override void SealdMethod() { }
}

接口
  接口是一种引用类型,有点像仅包含抽象成员的抽象基类
  类在从接口实现时必须为该接口的所有成员提供实现。 类虽然只能从一个直接基类派生,但可以实现多个接口
  不能实例化接口,接口即不能有构造函数,也不能有字段。接口定义也不允许包含运算符重载
  接口中不允许声明关于成员的修饰符,但是可以在实现的类中作声明
  接口成员总是公有的
  实现接口的类必须实现接口的所有成员
  接口之间的继承和类的继承方式相同

 public interface IDisposable
{
  void Dispose();
}

C#-继承(十一)的更多相关文章

  1. OOD沉思录 --- 继承

    一,继承只应被用来为特化层次结构建模 实际上也就是要满足LSP原则,水果类<-榴莲的继承是特化   二,派生类必须知道他们的基类,基类不应当知道他们的派生类   复用的前提   三,基类中的所有 ...

  2. perl5 第十三章 Perl的面向对象编程

    第十三章 Perl的面向对象编程 by flamephoenix 一.模块简介二.Perl中的类三.创建类四.构造函数 实例变量 五.方法六.方法的输出七.方法的调用八.重载九.析构函数十.继承十一. ...

  3. 四、java面向对象编程_2

    目录 六.对象的创建和使用 七.this关键字 八.static关键字 九.package和import语句 十.类的继承 十一.访问控制 十二.方法的重写 十三.super关键字 十四.继承中的构造 ...

  4. 无废话ExtJs 入门教程二十一[继承:Extend]

    无废话ExtJs 入门教程二十一[继承:Extend] extjs技术交流,欢迎加群(201926085) 在开发中,我们在使用视图组件时,经常要设置宽度,高度,标题等属性.而这些属性可以通过“继承” ...

  5. Java12-java语法基础(十一)继承

    Java12-java语法基础(十一)继承 一.继承 学习要求: 1. 理解继承的概念与作用 2. 掌握继承的实现机制 3.理解继承中的覆写与覆盖 4.掌握super关键字的使用 回顾: 1.对客观世 ...

  6. Core Java (十一) Java 继承,类,超类和子类

    Core Java (十一) Java 继承,类,超类和子类 标签: javaJavaJAVA 2013-01-22 17:08 1274人阅读 评论(0) 收藏 举报  分类: java(58) 读 ...

  7. “全栈2019”Java第五十一章:继承与final关键字详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. python【第二十一篇】Django模板继承、分页、cookie验证

    1.模板继承 母版master.html {% block title %}{% endblock %}2 {% block table-cont %}{% endblock %} 子板 {% ext ...

  9. C++拾遗(十一)类继承

    首先,这里提到的继承都是公用继承. 派生类 1.派生类需要添加自己的构造函数. 2.派生类创建之前会首先创建基类对象,即调用基类构造函数.在派生类构造函数后通过初始化列表将参数传递给基类构造函数. 3 ...

  10. 【Java学习笔记之二十一】抽象类在Java继承中的用法小结

    一.抽象类的基本概念 普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法.普通方法.static方法.常量和变量等内容.而抽象类是指在普通类的结构里面增加抽象方法的组成 ...

随机推荐

  1. 项目ITP(六) spring4.0 整合 Quartz 实现动态任务调度

    前言 系列文章:[传送门] 项目需求: http://www.cnblogs.com/Alandre/p/3733249.html 上一博客写的是基本调度,后来这只能用于,像每天定个时间 进行数据库备 ...

  2. Centos7搭建邮件服务器-Postfix+Cyrus-sasl+Courier-authlib+Dovecot+ExtMail+Centos7

    1.环境介绍 MTA: Postfix 3.1.4 SASL: Cyrus-sasl 2.1.26 ; Courier-authlib 0.66.1(Cyrus-sasl使用Courier-authl ...

  3. Java中的Interrupt使用

    初心 用interrupt中断程序 初步实现 public class InterruptionInJava implements Runnable{ @Override public void ru ...

  4. go等待N个线程完成操作总结

    第一种,基于原生带缓存的channel package main import "fmt" func main() { done := make(chan int, 10) for ...

  5. thinkphp自动映射分析

    thinkphp的字段映射功能可以隐藏表单中真正的字段名,自动映射到真正的数据库字段,如表单中input的提交的名字为mail,而数据库中存的是email实现的原理非常简单首先定义一个映射的数组,以下 ...

  6. 视频人脸检测——Dlib版(六)

    往期目录 视频人脸检测--Dlib版(六) OpenCV添加中文(五) 图片人脸检测--Dlib版(四) 视频人脸检测--OpenCV版(三) 图片人脸检测--OpenCV版(二) OpenCV环境搭 ...

  7. 消息中间件RabbitMQ(一)

    1.消息中间件 消息队列中间件是指利用高效可靠地消息传递机制传递消息.有两种传递模式:点对点模式.发布/订阅模式.流行的消息中间件有RabblitMQ.Kafka.RockerMQ.它们都提供了基于存 ...

  8. 2017 ACM/ICPC Asia Regional Shenyang Online(部分题解)

    HDU 6197 array array array 题意 输入n和k,表示输入n个整数和可以擦除的次数k,如果至多擦除k次能是的数组中的序列是不上升或者是不下降序列,就是魔力数组,否则不是. 解题思 ...

  9. Perl和操作系统交互(一):system、exec和反引号

    调用操作系统命令:system函数 system函数可以直接让perl调用操作系统中的命令并执行. system入门示例 例如: #!/usr/bin/perl system 'date +" ...

  10. C# Json反序列化

    Json反序列化有两种方式[本人],一种是生成实体的,方便处理大量数据,复杂度稍高,一种是用匿名类写,方便读取数据,较为简单. 使用了Newtonsoft.Json,可以自行在nuget中导入 Jso ...