c#-03关于类和继承的基本知识
一、类继承
- 通过类继承可以定义一个新类,新类纳入一个已经声明的类进行扩展
- 已经存在的类叫做基类,而通过继承出的类叫做派生类,派生类的组成为:
- 本身声明中的成员
- 基类的成员
- 派生类无法删除基类成员,但可以屏蔽,可以扩展自身方法和变量
- 格式: class OtherClass :SomeClass
- OtherClass 是派生类,而SomeClass 是基类
- 代码示例:
using System; namespace Derived_Class
{
class SomeClass
{
public int x = 10;
public string y = "This is father";
public void Display()
{
Console.WriteLine($"{y} and x : {x} ");
}
}
class OtherClass : SomeClass
{
private string s = "This is son";
public void Displays()
{
Console.WriteLine($"{s} and x : {x}"); }
}
class Program
{
static void Main(string[] args)
{
SomeClass ax=new SomeClass(); //基类
OtherClass bx=new OtherClass(); //派生类
ax.Display();
bx.Displays();
}
}
}
二、屏蔽基类成员
- 虽然派生类无法删除基类成员,但是可以屏蔽基类成员,使用new以及相同名称可以屏蔽基类成员,这是继承的基本功能之一,例如我们使用一个方法,但是这个方法适用于基类而非派生类,那么就需要来屏蔽基类成员
- 格式:使用关键词 new 来使基类 变量/方法 被屏蔽
Class OtherClass
{
new private int x=11;
···
}
- 代码示例
using System;
namespace Derived_Class
{
class SomeClass
{
public int x = 10;
public string y = "This is father";
public void Display()
{
Console.WriteLine($"{y} and x : {x} ");
}
}
class PrimClass : SomeClass
{
new private string y = "This is other son"; //基类屏蔽
new private int x = 29; //基类屏蔽
private int z = 30;
new public void Display()
{
Console.WriteLine($"{y} and x : {x} ");
}
}
class Program
{
static void Main(string[] args)
{
SomeClass ax=new SomeClass(); //基类
PrimClass cx = new PrimClass(); //派生类,屏蔽了基类方法和变量
ax.Display();
cx.Display();
}
}
}
基类访问
- 如果派生类必须访问被隐藏的基类成员,那么可以使用基类访问,由关键词 base 后面加一个 “ . ” 来实现
- 代码示例:
class PrimClass : SomeClass
{
new private string y = "This is other son"; //基类屏蔽
new private int x = 29; //基类屏蔽
private int z = 30;
new public void Display()
{
Console.WriteLine($"{y} and x : {x} ");
Console.WriteLine($"base.y {base.y} and base.x: {base.x} "); //基类访问
}
}
基类引用
- 若要使用派生类的基类部分,这时候就要用到基类的引用
- 格式:
OtherClass md= new OtherClass();
BaseClass mc = (BaseClass) md;
- 上述 mc 就可以访问 md 的基类部分
- 除此之外 mc 和 md 访问的位置是一样的,如果对 mc 进行修改,那么 md 的基类部分也会进行修改
- mc 是无法看到 md 的派生类部分的
虚方法和覆写方法
- 在上一节我们看到,当使用基类引用访问派生类对象时,得到的是基类的成员。虚方法可以使基类的引用访问“升至”派生类内
- 可以使用基类引用调用派生类的方法,只需满足下面的条件。
- 派生类的方法和基类的方法有相同的签名和返回类型。
- 基类的方法使用virtual标注。
- 派生类的方法使用override标注。
- 下面的代码展示了基类方法和派生类方法的virtual及oeride修饰符。
using System; namespace UsingOverrideVirtual
{
class MyBaseClass
{
private int val = 5;
virtual public int MyProperty
{
get { return val; }
}
} class MySecondClass : MyBaseClass
{
private int val = 10;
public override int MyProperty
{
get { return val; }
}
} class Program
{
static void Main(string[] args)
{
MySecondClass mc = new MySecondClass();
MyBaseClass md = (MyBaseClass)mc;
Console.WriteLine($" {mc.MyProperty} ");
Console.WriteLine($" {md.MyProperty} ");
}
}
}
c#-03关于类和继承的基本知识的更多相关文章
- (转)Java:类与继承
原文地址: http://www.cnblogs.com/dolphin0520/p/3803432.html 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大 ...
- Java编程里类的继承
今天,我们将要讨论的内容是Java里面类的继承的相关概念. 说到继承,我相信大家都不陌生.生活中,子承父业,子女继承父母的财产,这就是继承.实际上,Java里的继承也是如此.对于一个类来说,它的数据成 ...
- Java:类与继承
Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点,今天我们就来了解一些类与继承的相关知 ...
- Java:类与继承(隐藏和覆盖的问题)
盒子先生金金 Java:类与继承(隐藏和覆盖的问题) Java:类与继承 Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不 ...
- Java类与继承
Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点,今天我们就来了解一些类与继承的相 ...
- Swift4 类与继承, 类型转换, 类型判断
创建: 2018/03/05 完成: 2018/03/07 更新: 2018/03/09 完善标题 [Swift4 类与继承, 类型转换] -> [Swift4 类与继承, 类型转换与判断] 补 ...
- UML类图(上):类、继承和实现
面向对象设计 对于一个程序员来说,在工作的开始阶段通常都是别人把东西设计好,你来做.伴随着个人的成长,这个过程将慢慢变成自己设计一部分功能来实现,自己实现.如果要自己设计,无论是给自己看,还是给别人看 ...
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- iBatis.net 类的继承extends和懒加载
<resultMaps> <resultMap id="FullResultMap" class="t_c_team_member_permission ...
随机推荐
- 基于MIndSpore框架的道路场景语义分割方法研究
基于MIndSpore框架的道路场景语义分割方法研究 概述 本文以华为最新国产深度学习框架Mindspore为基础,将城市道路下的实况图片解析作为任务背景,以复杂城市道路进行高精度的语义分割为任务目标 ...
- BI报表与数据开发
先贴个不好看的图让内容好看一点,也顺便说一下数据处理的流程:收集数据,数据清洗与数据加工,数据展示 报表制作一般就是前面的开发兄弟们完成然后把数据交到报表的兄弟们,然后在根据领导要求制作报表.大概就是 ...
- 编译式安装MYSQL
安装所需组件 实际上只需要这四个配置即可 升级boot开始 升级结束 重新执行cmake make && make install 启动mysql 发现启动失败 #####原因:这是由 ...
- 在Linux下源码编译安装GreatSQL/MySQL
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 本 ...
- 发布 .NET MAUI / MAUI Blazor 应用 (1) - Windows
发布用于Windows的 .NET MAUI 应用 打开 PowerShell 终端 , 命令行进入工程目录,以我的例子工程为例, cd BlazorMaui BlazorMaui 替换为你自己工程名 ...
- Luogu1655 小朋友的球 (组合数学,第二类斯特林数,高精)
我bingoyes再高精用STL就饿死,死外边! string真的爽... 斯特林数模板题:\(S(n,m) = S(n-1,m-1)+S(n-1,m)*n\) #include <iostre ...
- 在.NET 6.0中使用不同的托管模型
大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 本章是<定制ASP NET 6.0框架系列文章>的第六篇.在本章中,我 ...
- 元数据治理利器 - Apache Atlas
一.功能简介 Atlas 是一组可扩展的核心基础治理服务,使企业能够高效地满足其在 Hadoop 中的合规性要求,并允许与整个企业数据生态系统集成.Apache Atlas 为组织提供开放的元数据管理 ...
- 非常全的一份Python爬虫的Xpath博文
非常全的一份Python爬虫的Xpath博文 Xpath 是 python 爬虫过程中非常重要的一个用来定位的一种语法. 一.开始使用 首先我们需要得到一个 HTML 源代码,用来模拟爬取网页中的源代 ...
- Java反射(重要)
全文内容 1: 获取字节码文件对象的三种方式 2: 获取公有,私有方法,并调用构造方法,成员方法 3: 获取并调用私有成员变量 4: 如何为实例对象的成员变量赋值 5: 文末有一些注意 tea1类代码 ...