C#中的类和继承
公众号「DotNet学习交流」,分享学习DotNet的点滴。
类继承
通过继承我们可以定义一个新类,新类纳入一个已经声明的类并进行扩展。
可以使用一个已经存在的类作为新类的基础。已存在的类称为基类(base class),新类称为派生类(derived class)。
基类规格说明:由冒号和后面跟着用作基类的类名称组成。
派生类被描述为直接基础列出的基类。
相关概念如下所示:

继承的成员可以被访问,就像是它们是派生类自己声明的一样。
在派生类中访问基类中的字段和方法的例子
class SomeClass //基类
{
public string field1 = "base class field";
public void Method1(string value)
{
Console.WriteLine($"Base class -- Method1: {value}");
}
}
class OtherClass : SomeClass //派生类
{
public string field2 = "derived class field";
public void Method2(string value)
{
Console.WriteLine($"Derived class -- Method2: {value}");
}
}
internal class Program
{
static void Main(string[] args)
{
OtherClass oc = new OtherClass();
oc.Method1(oc.field1);
oc.Method1(oc.field2);
oc.Method2(oc.field1);
oc.Method2(oc.field2);
}
}
运行结果如下所示:

所有的类都派生自object类
在C#中除了特殊的类object,所有的类都是派生类,即使没有基类规格说明。
在C#中一个类声明的基类规格说明中只能有一个单独的类。这称为单继承。
虽然类只能直接继承一个基类,但继承的层次没有限制。
隐藏继承的成员
可以使用new修饰符来屏蔽基类成员,代码如下U所示:
class SomeClass //基类
{
public string field1 = "base class field";
public void Method1(string value)
{
Console.WriteLine($"Base class -- Method1: {value}");
}
}
class OtherClass : SomeClass //派生类
{
//使用new修饰符屏蔽基类成员
new public string field1 = "derived class field";
new public void Method1(string value)
{
Console.WriteLine($"Derived class -- Method2: {value}");
}
}
internal class Program
{
static void Main(string[] args)
{
OtherClass oc = new OtherClass();
oc.Method1(oc.field1);
}
}
运行结果如下所示:

访问基类成员
可以使用基类访问(base access)表达式访问隐藏的继承成员,基类访问表达式由关键字base后面跟着一个点和成员的名称组成。
访问隐藏的基类成员的例子
代码如下:
class SomeClass //基类
{
public string field1 = "base class field";
}
class OtherClass : SomeClass //派生类
{
new public string field1 = "derived class field";
public void PrintField1()
{
Console.WriteLine(field1); //访问派生类
Console.WriteLine(base.field1); //访问基类
}
}
internal class Program
{
static void Main(string[] args)
{
OtherClass oc = new OtherClass();
oc.PrintField1();
}
}
运行结果如下所示:

C#中的类和继承的更多相关文章
- 关于Python中的类普通继承与super函数继承
关于Python中的类普通继承与super函数继承 1.super只能用于新式类 2.多重继承super可以保公共父类仅被执行一次 一.首先看下普通继承的写法 二.再看看super继承的写法 参考链接 ...
- JavaScript中的类式继承和原型式继承
最近在看<JavaScript设计模式>这本书,虽然内容比较晦涩,但是细品才发现此书内容的强大.刚看完第四章--继承,来做下笔记. 书中介绍了三种继承方式,类式继承.原型式继承和掺元类继承 ...
- java中阻止类的继承
1.使用final来修饰类 final表示这个类是继承树的末端,不能被继承. 2.将类的构造方法声明为private的,再提供一个static的方法来返回一个类的对象. JAVA语言要求继承时必须在构 ...
- ES6中的类和继承
class的写法及继承 JavaScript 语言中,生成实例对象的传统方法是通过构造函数.下面是一个例子 function Point(x, y) { this.x = x; this. ...
- [Android Studio] Android Studio中查看类的继承关系
转载自:http://blog.csdn.net/hyr83960944/article/details/38098091 查看类的继承关系的快捷键F4,在Android Studio常用快捷键这篇文 ...
- Android Studio中查看类的继承关系
查看类的继承关系的快捷键F4.在Android Studio经常使用快捷键这篇文章中.有写了.今天主要是讲一些关于这个快捷键出来的界面的一些配置.这块功能相对偏冷一些,可能非常多人都会用不到.可是关于 ...
- ES5中的类与继承
最近在重新复习TypeScript,看到类这块的时候自然会和ES5中的类写法进行对比加深印象. 发现ES5的类与继承一些细节还是挺多的,时间久了容易忘记,特此记录下. 首先是ES5的类定义,这没什么好 ...
- python中的类与继承
Class 类的定义以及实例的建立 Python中,类通过 class 关键字定义. 例如最简单的一个类定义可以为: class Person(object): pass Python 的编程习惯,类 ...
- ES6中。类与继承的方法,以及与ES5中的方法的对比
// 在ES5中,通常使用构造函数方法去实现类与继承 // 创建父类 function Father(name, age){ this.name = name; this.age = age; } F ...
- JavaScript、ES6中的类的继承
类的继承 extends connstructor super 例1: class Father { constructor(){} money(){ console.log("1000 ...
随机推荐
- Redis专题-队列
Redis专题-队列 首先,想一想 Redis 适合做消息队列吗? 1.消息队列的消息存取需求是什么?redis中的解决方案是什么? 无非就是下面这几点: 0.数据可以顺序读取 1.支持阻塞等待拉取消 ...
- 历时数月钻研推流/对比各种流媒体服务程序/PK总结
1 前言 大量测试下来,网页显示视频流实时性从高到低依次是 webrtc > ws-flv > flv > hls.播放器打开rtsp/rtmp视频流实时性由具体的播放器控制,比如缓 ...
- Spark RDD惰性计算的自主优化
原创/朱季谦 RDD(弹性分布式数据集)中的数据就如final定义一般,只可读而无法修改,若要对RDD进行转换或操作,那就需要创建一个新的RDD来保存结果.故而就需要用到转换和行动的算子. Spark ...
- 【故障公告】一而再,再而三,三翻四复:数据库服务器 CPU 100%
会员救园,故障捣乱,每当困难时,故障们总是喜欢雪上加霜过来考验你. 今天下班前 17:43~17:47 期间,园子的 SQL Server 数据库服务器突然出现 CPU 100% 问题. 发现问题后, ...
- Linux安装达梦数据库DM8
1.简介描述 DM8是达梦公司在总结DM系列产品研发与应用经验的基础上,坚持开放创新.简洁实用的理念,推出的新一代自研数据库.DM8吸收借鉴当前先进新技术思想与主流数据库产品的优点,融合了分布式.弹性 ...
- 【接口自动化测试】Eolink Apilkit 安装部署,支持 Windows、Mac、Linux 等系统
Eolink Apikit 有三种客户端,可以依据自己的情况选择.三种客户端的数据是共用的,因此可以随时切换不同的客户端. 我们推荐使用新推出的 Apikit PC 客户端,PC 端拥有线上产品所有的 ...
- Three.js中实现对InstanceMesh的碰撞检测
1. 概述 之前的文章提到,在Three.js中使用InstanceMesh来实现性能优化,可以实现单个Mesh的拾取功能 那,能不能实现碰撞检测呢?肯定是可以的,不过Three.js中并没有直接的A ...
- 好用!这些工具国庆一定要研究下「GitHub 热点速览」
再过 3 天就要开始一年最长的假期--国庆长假了,这次除了宅家.出游之外,多了一个新选项:研究下哪些项目可以安排上,来辅助自己的日常开发. 你觉得一周获得 4k star 的 hyperdx 如何,它 ...
- 运行在容器中Postgres数据库数据损坏后如何恢复?
前言 在使用 K8S 部署 RSS 全套自托管解决方案- RssHub + Tiny Tiny Rss, 我介绍了将 RssHub + Tiny Tiny RSS 部署到 K8s 集群中的方案. 其中 ...
- Django框架——中间件、Auth模块、ContentType
文章目录 一 什么是中间件 二 中间件有什么用 三 自定义中间件 process_request和process_response process_view process_exception pro ...