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的门槛. ...
随机推荐
- tomcat入门(一)几种常见的使用tomcat部署项目的方式
1.常规方式部署 直接把web项目复制到tomcat安装目录下的%Tomcat_Home%/webapps/{web项目} 2.使用控制台进行部署 若一个web应用结构为D:\workspace\We ...
- Unity 组件.name
组件.name 指的是组件所在游戏对象的名字,例如: Animation m_animation; m_animation =GetComponent<Animation>(); m_a ...
- [转]IE和FireFox中JS兼容之event .
转载于:http://blog.csdn.net/jiachunfeng/article/details/6448186 http://justcoding.iteye.com/blog/587876 ...
- (转)vim(vi)常用操作及记忆方法
vim(vi)常用操作及记忆方法 原文:https://www.cnblogs.com/doseoer/p/6241443.html vi(vim)可以说是linux中用得最多的工具了,不管你配置服务 ...
- Collections练习之按照字符串长度进行排序
不多说,直接上干货! 代码需求 想从 [abcde, cba, aa, zzz, cba, nbaa] 变成 [aa, cba, cba, zzz, nbaa, abcde] CollectionsD ...
- 工作空间造成的javaweb项目无法新建
出现问题: 当我打开myeclipse开发工具将原有的已经存在的一个名为jeecms的项目删除的时候,出现了删除不了,因此我采取了强制的删除的方法,最终项目删除了.接下来新建同名的javaweb就出现 ...
- css悬浮右侧悬浮
<html><head><title>CSSDemo</title><style type"text/css"> .ho ...
- sass基础
参考:https://www.sass.hk/guide/
- java调用7zip解压压缩包
前言 最近的项目中需要用到解压缩包的功能,客户给出的压缩包的格式主要是rar和zip,因此就打算使用java调用7zip的命令行进行解压文件,本文主要记录一下实现的过程以及其中遇到的问题. 7zip命 ...
- selenium代理
selenium.KeyDown("id=ctaskName", "d"); selenium.KeyPress("id=cta ...