公众号「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#中的类和继承的更多相关文章

  1. 关于Python中的类普通继承与super函数继承

    关于Python中的类普通继承与super函数继承 1.super只能用于新式类 2.多重继承super可以保公共父类仅被执行一次 一.首先看下普通继承的写法 二.再看看super继承的写法 参考链接 ...

  2. JavaScript中的类式继承和原型式继承

    最近在看<JavaScript设计模式>这本书,虽然内容比较晦涩,但是细品才发现此书内容的强大.刚看完第四章--继承,来做下笔记. 书中介绍了三种继承方式,类式继承.原型式继承和掺元类继承 ...

  3. java中阻止类的继承

    1.使用final来修饰类 final表示这个类是继承树的末端,不能被继承. 2.将类的构造方法声明为private的,再提供一个static的方法来返回一个类的对象. JAVA语言要求继承时必须在构 ...

  4. ES6中的类和继承

    class的写法及继承 JavaScript 语言中,生成实例对象的传统方法是通过构造函数.下面是一个例子     function Point(x, y) {  this.x = x;  this. ...

  5. [Android Studio] Android Studio中查看类的继承关系

    转载自:http://blog.csdn.net/hyr83960944/article/details/38098091 查看类的继承关系的快捷键F4,在Android Studio常用快捷键这篇文 ...

  6. Android Studio中查看类的继承关系

    查看类的继承关系的快捷键F4.在Android Studio经常使用快捷键这篇文章中.有写了.今天主要是讲一些关于这个快捷键出来的界面的一些配置.这块功能相对偏冷一些,可能非常多人都会用不到.可是关于 ...

  7. ES5中的类与继承

    最近在重新复习TypeScript,看到类这块的时候自然会和ES5中的类写法进行对比加深印象. 发现ES5的类与继承一些细节还是挺多的,时间久了容易忘记,特此记录下. 首先是ES5的类定义,这没什么好 ...

  8. python中的类与继承

    Class 类的定义以及实例的建立 Python中,类通过 class 关键字定义. 例如最简单的一个类定义可以为: class Person(object): pass Python 的编程习惯,类 ...

  9. ES6中。类与继承的方法,以及与ES5中的方法的对比

    // 在ES5中,通常使用构造函数方法去实现类与继承 // 创建父类 function Father(name, age){ this.name = name; this.age = age; } F ...

  10. JavaScript、ES6中的类的继承

    类的继承 extends  connstructor  super 例1: class Father { constructor(){} money(){ console.log("1000 ...

随机推荐

  1. TypeChat源码分析:基于大语言模型的定制化 AI Agent 交互规范

    TypeChat源码分析:基于大语言模型的定制化 AI Agent 交互规范 本文深入介绍了微软最近发布的 TypeChat 项目,该项目允许开发者定义大语言模型返回的响应结构.通过分析源代码,探讨了 ...

  2. 利用文件包含漏洞包含ssh日志拿shell

    今天看文章学了一招,有包含漏洞无法传文件的时候用 目标服务器环境为ubuntu,ssh登录日志文件是/var/log/auth.log 找个Linux的环境执行ssh '<? phpinfo() ...

  3. start_HTTPServer

    alias alias wser='sh /Users/enzhao/suanec/libs/envs/start_HTTPServer.sh' /Users/enzhao/suanec/libs/e ...

  4. MySQL查询语句的执行过程

    SQL语句的查询过程 文章源自:极客时间-MySQL核心知识45讲 1. 前言 先看一张图和一个简单的SQL查询语句:select * from T where ID=10; 2. 概述 大体来说,M ...

  5. 「Go笔记-02」变量、数据类型、数据类型间转换、进制转换...看这一篇就Go了

    前言 一个程序就是一个世界,不论是使用哪种高级程序语言编写程序, 变量都是其程序的基本组成单位, 变量 在 go 中 变量是用于存储数据的命名空间(内存位置),它可以表示一个值,这个值在程序执行过程中 ...

  6. 深入理解 Flutter 图片加载原理

    前言 随着Flutter稳定版本逐步迭代更新,京东APP内部的Flutter业务也日益增多,Flutter开发为我们提供了高效的开发环境.优秀的跨平台适配.丰富的功能组件及动画.接近原生的交互体验,但 ...

  7. 形象谈JVM-第三章-即时编译器优化技术

    即时编译器优化技术一览: 相信许多同学看完这个表格,脑子里面嗡嗡的,这些名字也是晦涩难懂,要实现这些优化的技术确实有比较大的难度,但是咱们只是学习,去理解这些技术,其实并不难,下面咱们直接开讲. 首先 ...

  8. 应用管理平台Walrus开源,构建软件交付新范式

    今日,数澈软件Seal(以下简称"Seal")宣布正式开源 Walrus,这是一款基于平台工程理念的应用管理平台,致力于解决应用交付领域的深切痛点. 借助 Walrus 将云原生的 ...

  9. 小红书获得小红书笔记详情 API 返回值说明

    ​ item_get_video-获得小红书笔记详情  注册开通 smallredbook.item_get_video 公共参数 名称 类型 必须 描述 key String 是 调用key(必须以 ...

  10. 想了解API接口,这一篇就够了

    API(Application Programming Interface)接口,对于大多数人来说可能还比较陌生,但实际上我们每天都在与它打交道.无论是使用手机上的应用程序,还是在网上购物,都少不了A ...