当前位置: 首页 > news >正文

C# Unity 面向对象补全计划 之 初识继承方法与多态

 本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正

本系列旨在通过补全学习之后,给出任意类图都能实现并做到逻辑上严丝合缝

1.继承方法

C# & Unity 面向对象补全计划 之 继承(字段与属性)-CSDN博客

本文讲述继承方法与多态性,是继承的重要伴随知识

我想实现如下内如:

有一个Computer类和一个Mycomputer类作为子类

父类提供推荐配置,而子类提出我自己的配置,并打印

1.1构造函数继承

子类构造函数会默认先调用父类构造函数

举个栗子:

Computer类:

class Computer {// 公共字段public string cpu ;// 私有字段private string gpu ;// 公共属性public string gpu_name {get => gpu;set => gpu = value;}// 公共构造函数public Computer() {cpu = "7500f及以上";gpu_name = "Rx580及以上";Console.WriteLine("{0},{1}",cpu,gpu_name);}// 公共自定义方法public virtual void Configuration() {}
}

当我执行Computer类的对象时,会输出如下:

子类继承: 

也可以用base关键词进行父类构造函数调用,用的不多故不做演示

class MyComputer : Computer {public MyComputer() {cpu = "5600";gpu_name = "3060";Console.WriteLine("{0},{1}", cpu, gpu_name);}
}

子类对象:

 输出:

如果父类构造函数是私有的话,就无法使用子类构造函数了

Q:我可以在调用子类构造函数的时候,不调用父类构造函数吗?

A:不行,因为这是语言设计的一部分,用于确保父类的成员被正确初始化

 1.2方法继承

我将Computer类添加了一个自定义方法,并将输出语句放到方法里

class Computer {// 公共字段public string cpu ;// 私有字段private string gpu ;// 公共属性public string gpu_name {get => gpu;set => gpu = value;}// 公共构造函数public Computer() {cpu = "7500f及以上";gpu_name = "Rx580及以上";}// 公共自定义方法public  void Configuration() {Console.WriteLine("{0},{1}", cpu, gpu_name);}
}

如果子类继承以后,写一个相同名字的方法,会输出什么?

MyComputer mycomputer = new MyComputer();
mycomputer.Configuration();
class Computer {// 公共字段public string cpu ;// 私有字段private string gpu ;// 公共属性public string gpu_name {get => gpu;set => gpu = value;}// 公共构造函数public Computer() {cpu = "7500f及以上";gpu_name = "Rx580及以上";}// 公共自定义方法public  void Configuration() {Console.WriteLine("{0},{1}", cpu, gpu_name);}
}class MyComputer : Computer {public MyComputer() {cpu = "5600";gpu_name = "3060";}public void Configuration(){Console.WriteLine("{0},{1}", cpu, gpu_name);}
}

不会继承,所以如果不做特殊处理的话,只会调用自己的方法

所以就用到了多态,直接跳到标题3:多态下

2.多态(上)

2.1方法重载

是指可以出现同名方法,规则如下:

public class Example
{public void Print(int a) { }public void Print(int a, int b) { }public void Print(double a) { }public void Print(int a, double b) { }public void Print(double a, int b) { }
}

2.2运算符重载 

运算符重载,一般也用的不多先用现学即可 

public static Complex operator +(Complex c1, Complex c2)
{return new Complex(c1.Real + c2.Real, c1.Imaginary + c2.Imaginary);
}
public static Complex operator +(Complex c1, Complex c2)
{return new Complex(c1.Real + c2.Real, c1.Imaginary + c2.Imaginary);
}

3.多态(下)

3.1虚方法(可以不重写)

在C#中,虚方法(virtual method)是指在基类中声明并可以在派生类中重写的方法

虚方法使用 virtual 关键字进行声明:

 public virtual void Configuration() {Console.WriteLine("推荐配置为{0},{1}", cpu, gpu_name);}

子类可以使用override关键字进行重写,并且添加逻辑:

   public override void Configuration(){      Console.WriteLine("我的配置为{0},{1}", cpu, gpu_name);Console.WriteLine("打印完毕");}

调用:

Computer computer = new Computer();
computer.Configuration();
MyComputer mycomputer = new MyComputer();
mycomputer.Configuration();

结果:

3.2抽象方法(强制重写)

抽象方法没有方法体,只包含在抽象类之中,只有方法签名,它们必须在派生类中实现

举个栗子:电脑这一概念的确就符合抽象的概念

abstract class Computer {// 公共字段public string cpu ;// 私有字段private string gpu ;// 公共属性public string gpu_name {get => gpu;set => gpu = value;}// 公共构造函数public Computer() {cpu = "7500f及以上";gpu_name = "Rx580及以上";}// 公共自定义方法public abstract void Configuration();      
}

子类继承的话,则强制进行方法重写:

 public override void Configuration(){      Console.WriteLine("我的配置为{0},{1}", cpu, gpu_name);Console.WriteLine("打印完毕");}

二者区别

相关文章:

C# Unity 面向对象补全计划 之 初识继承方法与多态

本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正 本系列旨在通过补全学习之后,给出任意类图都能实现并做到逻辑上严丝合缝 1.继承方法 C# & Unity 面向对象补全计划 之 继承(字段与属性&…...

突破PyCharm索引瓶颈:提升文件索引速度的策略

突破PyCharm索引瓶颈:提升文件索引速度的策略 PyCharm作为Python开发者的首选IDE,以其强大的功能和灵活的配置而广受好评。然而,当处理大型项目或复杂文件结构时,文件索引慢的问题可能会显著降低开发效率。本文将提供一系列优化技…...

体素相关的快速计算

“体素”通常是指在三维空间中具有固定尺寸和位置的小立方体单元。 体素的优点包括: 易于处理和计算:在计算机图形学和三维建模中,体素的结构相对简单,计算和操作较为方便。能精确表示物体的内部结构:对于一些需要了…...

Python 爬虫项目实战(二):爬取微博热搜榜

前言 网络爬虫(Web Crawler),也称为网页蜘蛛(Web Spider)或网页机器人(Web Bot),是一种按照既定规则自动浏览网络并提取信息的程序。爬虫的主要用途包括数据采集、网络索引、内容抓…...

文件解析漏洞复现

一、IIS 6.X 1.在网站目录创建文件夹名为xxx.asp/xxx.asa 文件夹,里面的任意文件都会被当作asp文件执行 创建1.asp 访问 2.ooo.asp.jpg会被当做asp文件执行 创建一个ooo.asp;.jpg 访问 二、IIS 7.X 上传1.jpg文件在网址后/.php可以成功执行 写一个1.jpg文件内容…...

git push报错 pre-receive hook declined

今天使用git提交的代码的时候,不然报错 pre-receive hook declined提交不上去,昨天还好好的。 经过检查发现,原来对应的分支被leader设置成受保护分支了,导致代码提交不上去。 然后在git管理平台取消分支保护,或者将我…...

打造个性化代码审查工具:在Perl中实现自定义审查的艺术

打造个性化代码审查工具:在Perl中实现自定义审查的艺术 代码审查是软件开发过程中的关键环节,它有助于提高代码质量和发现潜在缺陷。Perl作为一种灵活的编程语言,提供了丰富的特性,使得在Perl中实现自定义的代码审查工具成为可能…...

RabbitMq架构原理剖析及应用

文章目录 RabbitMQ 架构组件1. **Broker** (Broker Server)2. **Exchange**3. **Queue**4. **Producer** (消息生产者)5. **Consumer** (消息消费者)6. **Virtual Hosts** (虚拟主机) 工作流程内部原理1. **队列管理**2. **集群**3. **持久化与内存**4. **性能优化** 高级特性1…...

c# 对接第三方接口实现签名

官网文档要求如下: Sign算法说明 举例:假设请求参数键值对如下 appkey : test2-xx page_no : 0 end_time : 2016-08-01 13:00:00 start_time : 2016-08-01 12:00:00 page_size : 40 sid : test2 timestamp : 1470042310 第一步 对数所有请求参数按照…...

数学建模评价类模型—层次分析法(无数据情况下)

目录 前言 一、评价类问题概述 二、AHP建模流程 1、过程描述 2、层次分析法—Matlab代码 三、权重计算 1、算术平均法 2、几何平均法 3、特征值法 目录 文章目录 前言 一、评价类问题概述 二、AHP建模流程 1、过程描述 2、层次分析法—Matlab代码 三、权重计算 算术平均法 前言…...

模拟实现strcat(字符串追加)

1.我们要知道stcat的作用是什么,字符串追加。 2.我们进行模仿,我们先将arr1不断,直到“\0”,我们加在后面。 //模拟实现strcat(字符串追加) char* my_strcat(char* arr1, const char* arr2) {assert(arr1 && arr2);char ret arr1;…...

HTTP简单概述

一. HTTP HTTP(HyperText Transfer Protocol)是用于在客户端和服务器之间传输超文本数据(如HTML)的应用层协议。它是万维网的基础协议,定义了浏览器和服务器之间如何请求和传输文档。HTTP有多个版本,每个版…...

掌握PyCharm代码片段管理器:提升编码效率的秘诀

掌握PyCharm代码片段管理器:提升编码效率的秘诀 PyCharm作为业界领先的集成开发环境(IDE),提供了许多便利的功能来提升开发者的编码效率,其中之一就是代码片段管理器。代码片段管理器允许开发者保存、管理和重用代码模…...

MyBatis动态代理和映射器

目录 1、映射器简介 (1)什么是mapper动态代理? (2)动态代理的规范 (3)如何使用动态代理 (4)为什么学映射器 (5)映射器与接口 (…...

ShardingSphere中的ShardingJDBC常见分片算法的实现

文章目录 ShardingJDBC快速入门修改雪花算法和分表策略核心概念分片算法简单INLINE分片算法STANDARD标准分片算法COMPLEX_INLINE复杂分片算法CLASS_BASED自定义分片算法HINT_INLINE强制分片算法 注意事项 ShardingJDBC Git地址 快速入门 现在我存在两个数据库,并…...

SpringBoot整合Flink CDC实时同步postgresql变更数据,基于WAL日志

SpringBoot整合Flink CDC实时同步postgresql变更数据,基于WAL日志 一、前言二、技术介绍(Flink CDC)1、Flink CDC2、Postgres CDC 三、准备工作四、代码示例五、总结 一、前言 在工作中经常会遇到要实时获取数据库(postgresql、m…...

ThinkPHP事件的使用

技术说明 1.ThinkPHP版本:支持6.0、8.0 2.使用场景:用户登陆后日志记录、通知消息发送等主流程、次流程分离等场景 3.说明:网上很多帖子说的不明不白的,建议大家自己手动尝试总结一下 4.事件手动绑定的时候,一定要…...

【Nuxt】服务端渲染 SSR

SSR 概述 服务器端渲染全称是:Server Side Render,在服务器端渲染页面,并将渲染好HTML返回给浏览器呈现。 SSR应用的页面是在服务端渲染的,用户每请求一个SSR页面都会先在服务端进行渲染,然后将渲染好的页面&#xf…...

Spring Boot整合WebSocket

说明&#xff1a;本文介绍如何在Spirng Boot中整合WebSocket&#xff0c;WebSocket介绍&#xff0c;参考下面这篇文章&#xff1a; WebSocket 原始方式 原始方式&#xff0c;指的是使用Spring Boot自己整合的方式&#xff0c;导入的是下面这个依赖 <dependency><g…...

《LeetCode热题100》---<5.③普通数组篇五道>

本篇博客讲解LeetCode热题100道普通数组篇中的五道题 第五道&#xff1a;缺失的第一个正数&#xff08;困难&#xff09; 第五道&#xff1a;缺失的第一个正数&#xff08;困难&#xff09; 方法一&#xff1a;将数组视为哈希表 class Solution {public int firstMissingPosi…...

Halcon一维码识别避坑指南:从模糊图像到精准解码

Halcon一维码识别实战&#xff1a;攻克模糊图像与复杂场景的五大策略 在物流分拣线上&#xff0c;传送带以每秒2米的速度运行&#xff0c;扫码枪却频繁报错——这不是设备故障&#xff0c;而是Halcon参数配置与图像预处理策略的缺失。当条形码出现在褶皱包装、反光表面或运动模…...

SpeedyStepper Forked:嵌入式步进电机硬实时控制库解析

1. SpeedyStepper Forked&#xff1a;面向嵌入式实时控制的高性能步进电机驱动库深度解析1.1 库定位与工程价值SpeedyStepper Forked 是一个专为嵌入式平台&#xff08;尤其是基于Arduino生态的MCU&#xff09;设计的轻量级、高精度步进电机运动控制库。其核心目标并非提供图形…...

Vue/React项目实战:集成docx-preview实现动态报表预览与下载功能

Vue/React项目实战&#xff1a;动态报表预览与下载的工程化实现 在数据驱动的企业应用中&#xff0c;动态生成和预览业务报表是刚需功能。想象这样一个场景&#xff1a;销售团队在CRM系统中筛选季度数据后&#xff0c;需要立即查看格式规范的业绩分析报告&#xff0c;并能一键…...

前端未来趋势:别再用老掉牙的技术了

前端未来趋势&#xff1a;别再用老掉牙的技术了 各位前端同行&#xff0c;咱们今天聊聊前端未来趋势。别告诉我你还在使用老掉牙的技术&#xff0c;那感觉就像在使用诺基亚手机。 为什么你需要关注前端未来趋势 最近看到一个项目&#xff0c;还在使用 jQuery&#xff0c;我差点…...

stm32开发新手福音:告别复杂安装,用快马ai生成带详解的hal库基础代码

作为一名刚接触STM32开发的新手&#xff0c;我最近在尝试用HAL库控制GPIO时遇到了不少麻烦。从下载安装STM32CubeMX到配置工程&#xff0c;每一步都让我这个小白手忙脚乱。直到发现了InsCode(快马)平台&#xff0c;整个过程变得简单多了——不需要自己搭建环境&#xff0c;AI就…...

OpenClaw+GLM-4.7-Flash:个人博客内容自动生成与发布

OpenClawGLM-4.7-Flash&#xff1a;个人博客内容自动生成与发布 1. 为什么选择这个技术组合 去年夏天&#xff0c;我发现自己陷入了写作瓶颈——每周要产出3篇技术博客&#xff0c;但80%的时间都消耗在资料收集和格式调整上。直到发现OpenClawGLM-4.7-Flash这个组合&#xff…...

Java+AI:让技术概念落地为企业真实业务价值

在大模型技术普及的当下&#xff0c;不少Java技术栈企业完成了大模型的基础接入&#xff0c;但却陷入了“技术空转”的困境——仅实现了简单的API调用&#xff0c;却未能将AI能力与业务流程深度融合&#xff0c;最终让技术探索停留在概念层面。真正的AI价值&#xff0c;从来不是…...

SEO_详解SEO核心关键词的研究与布局方法(455 )

<h2>SEO核心关键词的研究与布局方法详解</h2> <p>在当前的互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为了各个企业和网站提升网络曝光率、吸引更多流量的重要手段。其中&#xff0c;核心关键词的研究与布局是SEO的重要组成部分。…...

光阀的“第二曲线”:投影行业LCOS技术现状与发展趋势分析

1. 报告导读与核心摘要 在投影显示技术的版图中,LCoS(硅基液晶,Liquid Crystal on Silicon)长期处于一种微妙的位置:它拥有DLP无法比拟的画质潜力,却因成本和体积问题始终未能真正撼动DLP的市场地位。然而,2025-2026年行业展会上的一系列技术突破,正在改写这一格局。 …...

Redis未授权访问漏洞实战:从SSH公钥到反弹shell的5种利用方式详解

Redis未授权访问漏洞深度攻防&#xff1a;5种高阶利用与防御方案 Redis作为高性能键值数据库&#xff0c;其未授权访问漏洞长期位居企业安全风险Top 10。本文将突破常规教程框架&#xff0c;从攻击者视角剖析5种实战利用手法&#xff0c;同时提供企业级防御方案。不同于基础复现…...