一、类继承

  • 通过类继承可以定义一个新类,新类纳入一个已经声明的类进行扩展
  • 已经存在的类叫做基类,而通过继承出的类叫做派生类,派生类的组成为:
    • 本身声明中的成员
    • 基类的成员
  • 派生类无法删除基类成员,但可以屏蔽,可以扩展自身方法和变量
  • 格式: 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 的基类部分
    • 除此之外 mcmd 访问的位置是一样的,如果对 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关于类和继承的基本知识的更多相关文章

  1. (转)Java:类与继承

    原文地址: http://www.cnblogs.com/dolphin0520/p/3803432.html 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大 ...

  2. Java编程里类的继承

    今天,我们将要讨论的内容是Java里面类的继承的相关概念. 说到继承,我相信大家都不陌生.生活中,子承父业,子女继承父母的财产,这就是继承.实际上,Java里的继承也是如此.对于一个类来说,它的数据成 ...

  3. Java:类与继承

    Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点,今天我们就来了解一些类与继承的相关知 ...

  4. Java:类与继承(隐藏和覆盖的问题)

    盒子先生金金   Java:类与继承(隐藏和覆盖的问题) Java:类与继承   Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不 ...

  5. Java类与继承

      Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点,今天我们就来了解一些类与继承的相 ...

  6. Swift4 类与继承, 类型转换, 类型判断

    创建: 2018/03/05 完成: 2018/03/07 更新: 2018/03/09 完善标题 [Swift4 类与继承, 类型转换] -> [Swift4 类与继承, 类型转换与判断] 补 ...

  7. UML类图(上):类、继承和实现

    面向对象设计 对于一个程序员来说,在工作的开始阶段通常都是别人把东西设计好,你来做.伴随着个人的成长,这个过程将慢慢变成自己设计一部分功能来实现,自己实现.如果要自己设计,无论是给自己看,还是给别人看 ...

  8. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  9. iBatis.net 类的继承extends和懒加载

    <resultMaps> <resultMap id="FullResultMap" class="t_c_team_member_permission ...

随机推荐

  1. 【线性DP】数字三角形

    题目链接 原题链接 题目描述 给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大. 7 3 ...

  2. Kubernetes v1.24 基于containerd部署

      k8s每个节点安装containerd.   containerd安装参考<containerd安装博文>:https://www.cnblogs.com/punchlinux/p/1 ...

  3. ESP8266 使用 DRV8833驱动板驱动N20电机

    RT 手里这块ESP8266是涂鸦的板子,咸鱼上三块一个买了一堆,看ESP8266-12F引脚都差不多的.裸焊了个最小系统,加两个按钮(一个烧录,一个复位) 1. 准备工作 搜索过程中发现 DRV88 ...

  4. WSL2安装Ubuntu20.04

    前言:听说WSL2需要Window版本在1904以上(我的window版本是1909,所以未能验证真实性) 启用WSL 控制面板 → 程序 → 程序和功能 → 启用或关闭Windows功能 勾选 适用 ...

  5. react 吸顶实现

    今天获取到一个需求,其实就是吸顶的需求,页面下滑,某一块dom隐藏时发生吸顶现象.这种特效其实老生常谈了,但是在这次做的时候,突发奇想,能否将其做成一个 hook ,从而实现出传递ref即可使得 do ...

  6. python常用功能模块

    路径相关:os.pathlib Windows注册表相关:winreg 系统cpu.内存.线程相关:psutil 文件.文件夹处理:shutil 解析和生成ini文件:ConfigParser:(co ...

  7. WPF开发随笔收录-WriteableBitmap绘制高性能曲线图

    一.前言 之前分享过一期关于DrawingVisual来绘制高性能曲线的博客,今天再分享一篇通过另一种方式来绘制高性能曲线的方法,也就是通过WriteableBitmap的方式:具体的一些细节这里就不 ...

  8. 如何构建 Apache DolphinScheduler 的 Docker 镜像

    继昨日发布第一个 [官方 Docker 镜像] 后,有几位小伙伴私信想自己进行编译,这里也将 Docker 的主要贡献者文禾同学整理的文档进行分享.以下是全文内容: 您能够在类 Unix 系统和 Wi ...

  9. Windows 电脑杀毒简单有效的方式

    Windows 电脑杀毒通常会选择杀毒软件,这样太笨重,且容易占内存和存在流氓软件侵入. 推荐使用 Windows 自带的恶意软件删除工具 按住 Win + R 键,弹出运行窗口,输入 mrt. 系统 ...

  10. Java SE 9 多版本兼容 JAR 包示例

    Java SE 9 多版本兼容 JAR 包示例 作者:Grey 原文地址:Java SE 9 多版本兼容 JAR 包示例 说明 Java 9 版本中增强了Jar 包多版本字节码文件格式支持,也就是说在 ...