C#中继承的核心定义‌

1. 继承的核心定义‌

‌继承‌ 是面向对象编程(OOP)的核心特性之一,允许一个类(称为‌子类/派生类‌)基于另一个类(称为‌父类/基类‌)构建,自动获得父类的成员(字段、属性、方法等),并可通过扩展或修改实现代码复用和多态行为。

2. C# 继承的关键特性‌

特性说明、
‌单继承‌C# 只支持单类继承(一个类只能有一个直接基类)
‌接口多继承‌一个类可实现多个接口(class A : I1, I2, I3)
‌传递性‌继承关系可多层传递(如 A → B → C)
‌隐式继承‌所有类隐式继承 System.Object(除非显式指定其他基类)
‌成员可见性控制‌通过 public、protected、private 等修饰符控制继承成员的访问权限

‌3. 继承的语法‌

// 基类定义
public class Vehicle
{public string Brand { get; set; }public void Start() => Console.WriteLine("Engine started");
}// 派生类继承基类
public class Car : Vehicle
{public int Wheels { get; set; }public void Drive() => Console.WriteLine("Driving...");
}

‌4. 继承的核心操作‌

‌(1) 访问基类成员‌

var car = new Car();
car.Brand = "Toyota";  // 继承自 Vehicle
car.Start();           // 调用基类方法

‌(2) 重写方法(虚方法)‌

public class Animal
{public virtual void Speak() => Console.WriteLine("Animal sound");
}public class Dog : Animal
{public override void Speak() => Console.WriteLine("Woof!");
}

‌(3) 抽象类与强制实现‌

public abstract class Shape
{public abstract double Area();  // 抽象方法(必须实现)
}public class Circle : Shape
{public double Radius { get; set; }public override double Area() => Math.PI * Radius * Radius;
}

‌5. 构造函数与继承‌

‌(1) 基类构造函数调用‌

public class BaseClass
{public BaseClass(int value) { /* 初始化逻辑 */ }
}public class DerivedClass : BaseClass
{// 必须通过 base 调用基类构造函数public DerivedClass(int value, string name) : base(value){Name = name;}public string Name { get; }
}

‌(2) 默认构造函数行为‌
若基类‌没有无参构造函数‌,派生类必须显式调用基类的有参构造函数,否则编译错误。

‌6. 阻止继承‌

使用 sealed 关键字禁止其他类继承:

public sealed class FinalClass { }  // 不可被继承
public class InvalidDerived : FinalClass { }  // 编译错误
# ‌7. 继承与多态‌

通过继承实现‌运行时多态性‌:

Animal animal = new Dog();
animal.Speak();  // 输出 "Woof!"(实际调用 Dog 类的方法)

‌8. 继承 vs 接口‌

‌场景‌ ‌类继承‌‌‌接口实现‌
成员类型 ‌可继承字段、方法、属性等具体实现‌仅定义方法/属性签名(无实现)
复用代码 ‌直接复用基类逻辑‌需重新实现所有接口成员
设计目标 ‌表达 “is-a” 关系(如 Car 是 Vehicle) ‌表达 “can-do” 能力(如 IDisposable)

‌9. 最佳实践‌

  • 避免深度继承链‌
    超过 3 层的继承关系通常意味着设计问题,优先使用组合(has-a)而非继承(is-a)。

  • ‌里氏替换原则(LSP)‌
    子类必须能够完全替代基类,不破坏原有逻辑。

  • ‌开放封闭原则(OCP)‌
    通过继承扩展功能,而非修改基类代码。

‌10. 典型应用场景‌

  • ‌UI控件框架‌:Button、TextBox 继承自 Control 基类
  • ‌领域模型‌:Employee、Manager 继承自 Person 基类
  • ‌插件系统‌:通过基类定义插件接口,子类实现具体功能

通过合理使用继承,可以显著提升代码的可维护性和扩展性,但需谨慎避免过度设计。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/33257.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式裸机设计--MCU常用裸机架构有哪些?

为什么是裸机设计 792125321入群学习更高效! 在MCU(微控制器单元)裸机开发中,我们常见的架构设计主要围绕如何高效管理资源和任务调度。认识这些开发方式,对我们开发一个小型项目来说及有好处! 下面介绍…

C语言基础知识04

指针 指针概念 指针保存地址,地址是字节的编号 指针类型和保存的地址类型要一直 使用时注意,把地址转换为&变量的格式来看 int a[3]; a转为&a[0] 指针的大小 64bit 固定8字节, 32bit 固定4字节 指针…

IDEA 一键完成:打包 + 推送 + 部署docker镜像

1、本方案要解决场景? 想直接通过本地 IDEA 将最新的代码部署到远程服务器上。 2、本方案适用于什么样的项目? 项目是一个 Spring Boot 的 Java 项目。项目用 maven 进行管理。项目的运行基于 docker 容器(即项目将被打成 docker image&am…

浏览器崩溃的第一性原理:内存管理的艺术

作者:京东科技 屠永涛 登录后复制 你是否曾经遇到过浏览器突然卡顿,甚至崩溃的情况?尤其是在打开多个标签页或运行复杂的网页应用时,浏览器似乎变得异常脆弱。这种崩溃的背后,往往与内存管理息息相关。 1. 浏览器的内存…

Redis的缓存雪崩、缓存击穿、缓存穿透与缓存预热、缓存降级

一、缓存雪崩: 1、什么是缓存雪崩: 如果缓在某一个时刻出现大规模的key失效,那么就会导致大量的请求打在了数据库上面,导致数据库压力巨大,如果在高并发的情况下,可能瞬间就会导致数据库宕机。这时候如果…

算法刷题整理合集(一)

本篇博客旨在记录自已的算法刷题练习成长,里面注有详细的代码注释以及和个人的思路想法,希望可以给同道之人些许帮助。本人也是算法小白,水平有限,如果文章中有什么错误或遗漏之处,望各位可以在评论区指正出来&#xf…

ubuntu ollama+dify实践

安装ollama 官网的指令太慢了,使用以下指令加速: export OLLAMA_MIRROR"https://ghproxy.cn/https://github.com/ollama/ollama/releases/latest/download" curl -fsSL https://ollama.com/install.sh | sed "s|https://ollama.com/dow…

Cookie与Session详解

Cookie简介 Cookie 是浏览器提供的持久化存储数据的一种机制。是指某些网站为了辨别用户身份、进行会话跟踪而储存在用户本地终端上的数据(通常经过加密)。以下是关于 Cookie 的详细介绍: Cookie工作原理 当你访问一个网站时,该网…

Python Openpyxl给Excel增加条件规则

使用openpyxl添加条件格式是一个简单而直接的过程。在使用Excel文件时,条件格式对于数据趋势的可视化、突出显示关键数据点以及使数据更有意义和可理解非常有用。在本文中,我们将详细介绍如何使用openpyxl添加条件格式。 OpenPyxl中的条件格式简介 在进…

离线服务器ollama新增qwen2:0.5b模型

离线服务器ollama新增qwen2:0.5b模型 Dify集成ollama前面已经介绍过离线服务器CentOS使用的docker安装的ollama,其中在ollama中已经安装了deepseek-r1:1.5b。目前的需求是需要再安装一个qwen2:0.5b的模型,那么如何安装呢? 1.首先在有网的服…

零成本本地化搭建开源AI神器LocalAI支持CPU推理运行部署方案

文章目录 前言1. Docker部署2. 简单使用演示3. 安装cpolar内网穿透4. 配置公网地址5. 配置固定公网地址 前言 嘿,小伙伴们!今天给大家带来一个超酷的黑科技——LocalAI。没错,你没听错,就是那个能在你的个人电脑上运行大型语言模…

数据类设计_图片类设计之4_规则类图形混合算法(前端架构)

前言 学的东西多了,要想办法用出来.C和C是偏向底层的语言,直接与数据打交道.尝试做一些和数据方面相关的内容 引入 接续上一篇,讨论图片类型设计出来后在场景中如何表达,以及图片的混合算法.前面的内容属于铺垫和基础,这篇内容和实际联系起来了. 背景图和前景图 这里笔者想先…

Burpsuite使用笔记

Burpsuite使用笔记 抓包设置代理open Browserintercept on输入要抓包的网站回车ForwardHTTP history查看抓包数据其他浏览器配置burpsuite代理浏览器代理器插件配置打开代理同样步骤访问 原理三级目录 抓包 设置代理 open Browser 打开内置浏览器 intercept on 输入要抓包…

使用Dockerfile打包java项目生成镜像部署到Linux_java项目打docker镜像的dockerfile

比起容器、镜像来说,Dockerfile 非常普通,它就是一个纯文本,里面记录了一系列的构建指令,比如选择基础镜像、拷贝文件、运行脚本等等,每个指令都会生成一个 Layer,而 Docker 顺序执行这个文件里的所有步骤&…

移远通信联合德壹发布全球首款搭载端侧大模型的AI具身理疗机器人

在汹涌澎湃的人工智能浪潮中,具身智能正从实验室构想迈向现实应用。移远通信凭借突破性的端侧AI整体解决方案,为AI机器人强势赋能,助力其实现跨行业拓展,从工业制造到服务接待,再到医疗康养,不断改写各行业…

技术视界|构建理想仿真平台,加速机器人智能化落地

在近期的 OpenLoong 线下技术分享会 上,松应科技联合创始人张小波进行了精彩的演讲,深入探讨了仿真技术在机器人智能化发展中的关键作用。他结合行业趋势,剖析了现有仿真平台的挑战,并描绘了未来理想仿真系统的设计理念与实现路径…

JConsole 在 Linux 上的使用

JConsole 在 Linux 上的使用指南 1. 启动 JConsole 远程监控 Linux 服务器上的 JVM 进程 1.1 修改 JMX 配置&#xff0c;允许远程访问 在 Linux 服务器 启动 Java 应用时&#xff0c;需要加上 -Djava.rmi.server.hostname<服务器IP>&#xff0c;完整的启动参数如下&am…

【C#学习】协程等待

来源GPT&#xff0c;仅记录学习 yield return WaitForEndOfFrame() 适用于 渲染结束后再执行代码&#xff0c;但 WebGL 可能不适合这个操作&#xff0c;会拖慢帧率。(渲染得太慢&#xff09; yield return null; 让代码在下一帧的 Update() 里继续运行&#xff0c;更加流畅。 …

店匠科技携手 PayPal 升级支付体验,助力独立站商家实现全球增长

在全球化电商竞争加剧的背景下,独立站为无数商户插上了通向事业成功的翅膀。然而,搭建店铺框架容易,真正实现有效运营却充满挑战。只有当各个环节如齿轮般严丝合缝,独立站运营才能更好地助推行进,实现稳健增长。如今,独立站商家面临着全链路运营的多重挑战。从品牌塑造、营销推…

【算法】数组、链表、栈、队列、树

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 持续更新中...数组、链表点击消除环形链表环形链表 II 栈、队列树 持续更新中… 数组、链表 点击消除 AB5 点击消除 这个题很容…