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

C#教程(四):多态

1、介绍

1.1 什么是多态

在C#中,多态性(Polymorphism)是面向对象编程中的一个重要概念,它允许不同类的对象对同一消息做出响应,即同一个方法可以在不同的对象上产生不同的行为。C#中的多态性可以通过以下几种方式实现:

1.2 为什么需要多态

多态性能够提高代码的灵活性和可扩展性,使得程序可以更轻松地适应不同的需求和情境。在C#中,这种特性有助于编写更具有组织性和可维护性的代码

2、实现方式

2.1 方法重载

2.1.1 什么是方法重载

在同一个类中定义多个方法,它们具有相同的名称但具有不同的参数列表。编译器会根据方法参数的类型、顺序和数量来区分调用不同的方法。

2.2 实例

创建MyClass.cs

using System;
using System.Collections.Generic;
using System.Text;namespace Polymorphism
{class MyClass{public void DoSomething(int num){Console.WriteLine($"我是DoSomething之我接受的是int类型的参数:{num}");}public void DoSomething(string text){Console.WriteLine($"我是DoSomething之我接受的是string类型的参数:{text}");}}
}

运行效果
在这里插入图片描述

2.2 方法重写

2.2.1 概念

在继承关系中,子类可以重写(覆盖)父类的虚方法或抽象方法,以实现特定于子类的行为。

2.2.2 实例

创建Animal.cs

using System;
using System.Collections.Generic;
using System.Text;namespace Polymorphism
{class Animal{public virtual void MakeSound(){Console.WriteLine("我能发出声音。");}}class Dog : Animal{public override void MakeSound(){Console.WriteLine("汪汪汪...");}}class Cat : Animal{public override void MakeSound(){Console.WriteLine("喵喵喵...");}}
}

运行结果
在这里插入图片描述

2.3 接口

2.3.1 概念

接口定义了一组方法、属性和事件的契约,类可以实现一个或多个接口。通过接口,不同的类可以共享相同的行为特征。

2.3.2 实例

创建Shape.cs

using System;
using System.Collections.Generic;
using System.Text;namespace Polymorphism
{interface IShape{double CalculateArea();}// 创建圆class Circle : IShape{public double Radius { get; set; }public double CalculateArea(){return Math.PI * Radius * Radius;}}// 创建矩形类class Rectangle : IShape{public double Width { get; set; }public double Height { get; set; }public double CalculateArea(){return Width * Height;}}
}

运行结果
在这里插入图片描述

3、Program.cs

以上三个实例的类实例化代码均在下面代码

using System;namespace Polymorphism
{class Program{static void Main(string[] args){// 实例1//MyClass myClass = new MyClass();//myClass.DoSomething(7);//myClass.DoSomething("凯文");// 实例2//Dog dog = new Dog();//dog.MakeSound();//Cat cat = new Cat();//cat.MakeSound();// 实例3Circle circle = new Circle();circle.Radius = 2;double area1 = circle.CalculateArea();Console.WriteLine($"圆形面积:{area1}");Rectangle rectangle = new Rectangle();rectangle.Width = 2;rectangle.Height = 2;double area2 = rectangle.CalculateArea();Console.WriteLine($"矩形面积:{area2}");}}
}

相关文章:

C#教程(四):多态

1、介绍 1.1 什么是多态 在C#中,多态性(Polymorphism)是面向对象编程中的一个重要概念,它允许不同类的对象对同一消息做出响应,即同一个方法可以在不同的对象上产生不同的行为。C#中的多态性可以通过以下几种方式实现…...

电力系统风储联合一次调频MATLAB仿真模型

微❤关注“电气仔推送”获得资料(专享优惠) 简介: 同一电力系统在不同风电渗透率下遭受同一负荷扰动时,其频率变化规律所示: (1)随着电力系统中风电渗透率的不断提高,风电零惯性响…...

《PCI Express体系结构导读》随记 —— 内容与作者简介

本书内容介绍 本书讲述了PCI与PCI Express总线相关的最为基础的内容,并介绍了一些必要的、与PCI总线相关的处理器体系结构知识,这也是本书的重点所在。深入理解处理器体系结构是理解PCI与PCI Express总线的重要基础。 读者通过对本书的学习&#xff0c…...

C#字典和列表转LuaTable

C#字典和列表转LuaTable 将C#Dictionary转成luaTable将C#List转成luaTable 将C#Dictionary转成luaTable function DicToLuaTable(Dic)--将C#的Dic转成Lua的Tablelocal dic {}if Dic thenlocal iter Dic:GetEnumerator()while iter:MoveNext() dolocal k iter.Current.Keylo…...

动态内存管理(1)

目录 ​​​​​​​ 1. 为什么存在动态内存分配 2. 动态内存函数的介绍 2.2 calloc 2.3 realloc 3. 常见的动态内存错误 3.1 对NULL指针的解引用操作 3.2 对动态开辟空间的越界访问 3.3 对非动态开辟内存使用free释放 3.4 使用free释放一块动态开辟内存的一部分 3.5 对同一块动…...

ThunderSearch(闪电搜索器)_网络空间搜索引擎工具_信息收集

文章目录 ThunderSearch简介1 项目地址2 使用方式2.1 配置文件config.json说明2.2 构建和运行 3 使用式例 ThunderSearch简介 ThunderSearch(闪电搜索器)是一款使用多个(【支持Fofa、Shodan、Hunter、Zoomeye、360Quake网络空间搜索引擎】网络空间搜索引…...

Topaz Video AI 视频修复工具(内附安装压缩包win+Mac)

目录 一、Topaz Video AI 简介 二、Topaz Video AI 安装下载 三、Topaz Video AI 使用 最近玩上了pika1.0和runway的图片转视频,发现生成出来的视频都是有点糊的,然后就找到这款AI修复视频工具 Topaz Video AI。 一、Topaz Video AI 简介 Topaz Video…...

android内存管理机制概览

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。 目录 一、导读二、概览三、相关概念3.1 垃圾回收3.2 应用内存的分配与回…...

下载MySQL Connector/C++

MySQL :: Download Connector/C...

ai gpt 鸡皮剔提问技巧

请将如下AB两组信息逐个匹配上的进行同类归类,用json格式输出: A:苹果 电脑 汽车 B: 猕猴桃 笔记本 根据你的要求,逐个匹配 A 组和 B 组的元素,并以 JSON 格式输出同类的归类信息: json { "匹配信息"…...

详谈 springboot整合shiro

背景: 本章将进一步的落地实践学习,在springboot中如何去整合shrio,整个过程步骤有个清晰的了解。 利用Shiro进行登录认证主要步骤: 1. 添加依赖:首先,在pom.xml文件中添加Spring Boot和Shiro的相关依赖…...

备忘录模式(Memento)

备忘录模式(Memento Pattern)是一种行为型设计模式,允许在不破坏封装的前提下捕获并保存一个对象的内部状态,以便在以后可以将该对象恢复到原先保存的状态。 备忘录模式通常涉及以下几个角色: 发起人(Originator):创建一个含有其当前状态的备忘录对象,并可以使用备忘录…...

【RocketMQ每日一问】consumeGroup心跳内容是什么样的?

消费者组:消费者所在的消费者组名称。这个信息用于确保同一个消费者组内的消费者不会重复地消费相同的消息。MessageModel:消息模型,可能的值为集群消费或广播消费。ConsumeType:消费类型,可能的值有"主动消费&qu…...

yolov5知识蒸馏

参考代码:https://github.com/Adlik/yolov5 https://cloud.tencent.com/developer/article/2160509 yolov5间的模型蒸馏,相同结构的。 配置参数 parser.add_argument(--t_weights, typestr, default./weights/yolov5s.pt,helpinitial teacher model wei…...

HUAWEI华为笔记本电脑MateBook D 14 2022款 i5 集显 非触屏(NbDE-WFH9)原装出厂Windows11系统21H2

链接:https://pan.baidu.com/s/1-tCCFwZ0RggXtbWYBVyhFg?pwdmcgv 提取码:mcgv 华为MageBookD14原厂WIN11系统自带所有驱动、出厂状态主题壁纸、Office办公软件、华为电脑管家、华为应用市场等预装软件程序 文件格式:esd/wim/swm 安装方式…...

微服务-springcloud(eureka实践, nacos实践)

Spring 体系图 版本关系 eureka 实践 1 父工程依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.14</version> </parent> <dependencyManage…...

Hadoop入门学习笔记——五、在虚拟机中部署Hive

视频课程地址&#xff1a;https://www.bilibili.com/video/BV1WY4y197g7 课程资料链接&#xff1a;https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd5ay8 Hadoop入门学习笔记&#xff08;汇总&#xff09; 目录 五、在虚拟机中部署Hive5.1. 在node1虚拟机安装MySQL5.2.…...

用Nest 实现大文件分片上传,加速工作效率神器

文件上传是常见需求&#xff0c;只要指定 content-type 为 multipart/form-data&#xff0c;内容就会以这种格式被传递到服务端&#xff1a; 服务端再按照 multipart/form-data 的格式提取数据&#xff0c;就能拿到其中的文件。 但当文件很大的时候&#xff0c;事情就变得不一样…...

将ncnn及opencv的mat存储成bin文件的方法

利用fstream&#xff0c;将ncnn及opencv的mat存储成bin文件。 ncnn::Mat to bin std::ios::binary标志指示文件以二进制模式进行读写&#xff0c; std::ofstream file("output_x86.bin", std::ios::binary); 将input_mat中的宽、高和通道数分别赋值给width、heig…...

dpdk原理概述及核心源码剖析

dpdk原理 1、操作系统、计算机网络诞生已经几十年了&#xff0c;部分功能不再能满足现在的业务需求。如果对操作系统做更改&#xff0c;成本非常高&#xff0c;所以部分问题是在应用层想办法解决的&#xff0c;比如前面介绍的协程、quic等&#xff0c;都是在应用层重新开发的框…...

计算机毕业设计springboot高校实验室安全巡检系统 基于SpringBoot的高校实验室智能安防监管平台 SpringBoot框架下高校实验楼安全隐患排查与预警系统

计算机毕业设计springboot高校实验室安全巡检系统4p1y5wo9 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着高等教育规模的持续扩张&#xff0c;高校实验室数量与类型日益增多…...

EcomGPT-7B多语言能力:俄语商品→自动适配Wildberries平台标题规则

EcomGPT-7B多语言能力&#xff1a;俄语商品→自动适配Wildberries平台标题规则 1. 引言&#xff1a;跨境电商的本地化难题 如果你正在做俄罗斯电商&#xff0c;或者想把商品卖到Wildberries平台&#xff0c;一定遇到过这个头疼的问题&#xff1a;怎么把中文的商品信息&#x…...

从‘下载失败弹个错’到‘优雅的用户体验’:前端文件下载错误处理与PDF预览的进阶实践

从‘下载失败弹个错’到‘优雅的用户体验’&#xff1a;前端文件下载错误处理与PDF预览的进阶实践 在当今的Web应用中&#xff0c;文件下载功能几乎是每个系统的标配。然而&#xff0c;很多开发者往往只关注功能的实现&#xff0c;而忽略了异常处理和用户体验的细节。当用户点…...

解决QGIS 3.22.4编译后启动报错:从‘dll未加载’到‘plugins缺失’的实战排错记录

QGIS 3.22.4编译后启动报错的深度排查与解决方案 当你终于完成了QGIS 3.22.4的源码编译&#xff0c;满怀期待地双击qgis.exe时&#xff0c;却遭遇了"qgis_app.dll无法加载"的报错。这就像跑完马拉松却在终点线前摔倒一样令人沮丧。但别担心&#xff0c;这些问题其实都…...

技术竞赛之道:从创新构想到落地执行的实战心法

技术竞赛之道&#xff1a;从创新构想到落地执行的实战心法 【免费下载链接】A-to-Z-Resources-for-Students ✅ Curated list of resources for college students 项目地址: https://gitcode.com/GitHub_Trending/at/A-to-Z-Resources-for-Students 在当今技术驱动的时…...

手把手教你优化SiC MOSFET模块:从铜带键合到双面散热的5个关键技术

SiC MOSFET功率模块封装优化实战&#xff1a;五大关键技术深度解析 在电力电子领域&#xff0c;碳化硅(SiC)MOSFET功率模块正逐步取代传统硅基IGBT&#xff0c;成为高效率、高功率密度应用的首选。然而&#xff0c;要充分发挥SiC材料的性能优势&#xff0c;封装技术面临前所未…...

AUTOSAR CANFM模块中,BusOff恢复的50ms和1000ms周期到底怎么来的?底层驱动配置详解

AUTOSAR CANFM模块中BusOff恢复时序的硬件级解析 在车载ECU开发中&#xff0c;CAN总线通信的可靠性直接关系到整车功能安全。当节点因连续错误进入BusOff状态时&#xff0c;AUTOSAR标准定义的50ms快恢复周期和1000ms慢恢复周期并非随意设定&#xff0c;而是源于CAN控制器硬件特…...

3月技术风暴:程序员的范式革命——2026年3月科技大事件记录

2025年3月&#xff1a;颠覆性技术狂潮与程序员认知升维全纪录 3月结束&#xff0c;你感受到“版本迭代”的压力了吗&#xff1f; 2025年的春天不是春暖花开&#xff0c;而是技术奇点的“温度骤升”。本文绝非一份普通事件清单&#xff0c;而是用程序员的第一性原理&#xff0c;…...

hnswlib高级功能全解:多线程搜索/动态更新/过滤器实战指南

hnswlib高级功能全解&#xff1a;多线程搜索/动态更新/过滤器实战指南 【免费下载链接】hnswlib Header-only C/python library for fast approximate nearest neighbors 项目地址: https://gitcode.com/gh_mirrors/hn/hnswlib hnswlib是一个高效的Header-only C/Python…...

基础知识:理解虚拟资产 / 数字商品 / 实用代币 / 稳定币 / 资产支持代币 / 数字收藏品 / 数字证券

比特币等虚拟资产全景与深度解析&#xff1a;超越“数字货币”的多元生态比特币等虚拟资产的世界&#xff0c;远比“一种数字货币”要丰富和复杂得多。理解它的第一步&#xff0c;就是先认识这个大家族里都有哪些成员。为了帮你建立清晰的概念&#xff0c;我们可以把虚拟资产看…...