C#继承简介与规则
一、C#继承简介
1. 类的层次结构
下面是一个类的层次结构图:

上图反映了鱼类的派生关系,其中最高层的实体往往具有最一般最普遍的特征,越下层的实体就越具体,并且下层包含了上层的特征。如果将上层的实体比作基类,那么下层的实体就可以比作派生类,而基类也可以称为派生类的父类。
继承就是在类之间建立一种相交关系,使得新定义的派生类的实例可以继承已有的基类的特征和能力,而且可以加入新的特征或者修改已有的基类的特性,以建立起类的新层次。
在C#中,继承是指能够从它的父类中继承除构造函数以外的所有数据的定义和功能。除构造函数和析构函数以外,派生类隐式地继承了直接基类的所有成员,其中就包括继承“方法、域、属性、事件和索引指示器”等成员。
2. 类的继承方式
类的继承方式为:在声明类时,在类名称后面加上冒号,在冒号后面指定要从中继承的类(基类)。
例如:
public class Vehicle // 定义汽车类,这是基类
{
public Vehicle(){}
}
public class Car : Vehicle // 定义轿车类,从汽车类中继承。这是派生类
{
public Car(){}
}
在上例中,派生类(新类)将获取基类的所有非私有数据和行为以及新类为自己定义的所有其它数据或行为。因此,新类具有两个有效类型:新类的类型和它继承的类的类型。
二、C#继承规则
1. C#中类的继承规则
C#中类的继承规则如下:
?继承是能够传递的。如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同时也继承了A中的成员。注意:Object类是所有类的基类。
?派生类应该是对基类的扩展。派生类可以添加新的成员,但是不能移除已经继承的成员的定义。
?构造函数和析构函数不能被继承。除此之外的其它成员,都能被继承。基类中成员的访问方式只能决定派生类是否能访问它们。
?派生类如果定义了与继承而来的成员同名的新成员,就可以覆盖已继承的成员。此时,派生类不能访问被覆盖的成员,不过,使用new修饰符可以声明具有相同名称或签名的新成员。
?类可以使用virtual修饰符定义虚方法、虚属性和虚索引指示器,它的派生类能够使用override修饰符来重载这些成员。
?派生类只能从一个类中继承,可以通过接口实现多重继承。
2. 示例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test
{
class Program
{
public class A // 基类
{
protected string name; // 受保护字段成员,可在当前类和派生类中访问
protected int age; // 受保护字段成员
public A(string name, int age) // 实例构造函数
{
this.name = name;
this.age = age;
}
public void ShowA()// 公共方法
{
Console.WriteLine("name:{0} age:{1}",name,age);
}
}
public class B : A // 这是派生类,以A作为基类
{
private int ID; // 派生类的成员
public B(int ID, string name, int age)
: base(name, age) // 调用直接基类的实例构造函数
{
this.ID = ID;
}
public void ShowB() // 公共方法
{
Console.WriteLine("ID:{0}", ID);
}
}
static void Main(string[] args)
{
// C#继承规则-www.baike369.com
B b = new B(100,"BaiXue",18);// 创建类的实例
b.ShowA(); // 调用基类的方法
b.ShowB(); // 调用自身类的方法
Console.ReadLine();
}
}
}
运行结果:
name:BaiXue age:18
ID:100
C#继承简介与规则的更多相关文章
- "MySql.Data.MySqIClient.MySqlProviderSevices”违反了继承安全 性规则。派生类型必须与基类型的安全可访问性匹配或者比基类型的安 全可访问性低。 "解决方法
写Code First 时(使用的是MySql数据库),添加好EntityFrame.MySql.Data .MySql.Data.Entity后 ,写好TestDbContext类. 运行时报出一个 ...
- C#继承机制 C#中的继承符合下列规则
1.继承是可传递的.如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中的成员.Object 类作为所有类的基类. 2.派生类应当是对基类的扩展.派生类可以添加新的成员, ...
- python继承简介
继承 是面向对象的三大特性之一 作用: 通过继承可以使一个类获取其它类中的属性和方法 使用方法: 在定义类时,可以在类名后的括号中指定当前类的父类(超类.基类.super) 这样子类(衍生类)就可以直 ...
- 干货:python面对对象类继承简介
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:python视觉算法 PS:如有需要Python学习资料的小伙伴可以加 ...
- 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.4 LHS简介&Pattern
LHS简介 在规则文件组成章节,我们已经了解了LHS的基本使用说明.LHS是规则条件部分的统称,由0个或多个条件元素组成.前面我们已经提到,如果没有条件元素那么默认就是true. 没有条件元素,官方示 ...
- 《Drools7.0.0.Final规则引擎教程》第4章 4.4 LHS简介&Pattern
LHS简介 在规则文件组成章节,我们已经了解了LHS的基本使用说明.LHS是规则条件部分的统称,由0个或多个条件元素组成.前面我们已经提到,如果没有条件元素那么默认就是true. 没有条件元素,官方示 ...
- Eslint 配置及规则说明(报错)
https://blog.csdn.net/violetjack0808/article/details/72620859 https://blog.csdn.net/hsl0530hsl/artic ...
- CSS选择器的权重与优先规则?
我们做项目的时候,经常遇到样式层叠问题,被其他的样式覆盖,或者写的权重不高没效果,对权重没有具体的分析,做了一个总结. css继承是从一个元素向其后代元素传递属性值所采用的机制.确定应当向一个元素应用 ...
- 学习Sass 的基本语法规则[Sass和compass学习笔记]
自从发现可编程的css语法 Sass和基于Sass的css库compass 一个给我的感觉像c# 另外一个给我的感觉像.NET Framework,一切都为了提升开发效率和降低开发大型web的门槛. ...
随机推荐
- C#:新邮件监听及搜索
在项目中,我们需要监听邮件服务器,看是否有新的邮件进入.下面的代码可以帮助我们监听新邮件,并对已有的邮件进行查找: using System; using System.Collections.Gen ...
- git分布式的理解----简单服务端搭建
Git是分布式的,并没有服务端跟客户端之分,所谓的服务端安装的其实也是git.Git支持四种协议,file,ssh,git,http.ssh是使用较多的,下面使用ssh搭建一个免密码登录的服务端. 1 ...
- AndroidStudio3.0的安装和配置笔记
开发Android项目要搭建开发环境.可以选择使用Eclipse安装ADT插件来开发安卓项目,也可以使用谷歌的官方IDE——AndroidStudio3.0. AndroidStudio3.0安装的具 ...
- 转-Shell笔记——命令:Sort,uniq,join,cut,paste,split
转自:http://blog.csdn.net/wklken/article/details/6562098 Sort,uniq,join,cut,paste,split 命令—— Sort Sort ...
- Spring Boot实战(2) Spring常用配置
1. Bean的Scope scope描述Spring容器如何新建Bean的实例.通过注解@Scope实现,取值有: a. Singleton:一个Spring容器中只有一个Bean的实例.此为Spr ...
- c# 截取picturebox部分图像
Bitmap bit = new Bitmap(renderImage.Width, renderImage.Height); using (Graphics g = Graphics.FromIma ...
- 第三方缓存软件memcached和redis异同
memcached和redis相同点:都是以键值对的形式来存储数据,通俗讲就是一个大的hashtable缓存数据都是存在内容中 key-value 不同点:memcached:1.一个key所对应的值 ...
- 初识JavaScriptOOP(js面向对象)
初识JavaScriptOOP(js面向对象) Javascript是一种基于对象(object-based)的语言, 你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言 ...
- 粗看ES6之解构赋值
标签: javascript es6 什么是解构赋值? 示例如下: <!DOCTYPE html> <html> <head> <meta charset=& ...
- elasticsearch复杂查询-----2
1.多条件查询 1)查询索引weibo下字段date大于或等于2015-09-05和name为Mary Jone的数据 2.简单查询 1)查询包含2014字符的数据 2)查询包含字符2014-09-1 ...