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();

			// 实例3
            Circle 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}");
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

每日一题-----逆序字符串

大家好我是Beilef,在一个美好的下午我意外接触到编程并且产生了兴趣,哈哈我要努力成为一个跨界者,让我们一起加油吧O(∩_∩)O 文章目录 目录 文章目录 前言 大家好请上车 一、逆序字符串 题⽬描述: 输⼊⼀个字符串,写…

UiPath报告 | 2024年7大自动化和Al趋势

在自动化与人工智能的合力推动下,全球企业正在步入一个创造价值的新纪元。 预计市场将涌现出一系列高潜力的AI应用实例; 企业的日常运营和复杂流程管理方式将面临根本性的变革,人工智能的崛起正加速企业自动化进程,促成价值的快速…

【WPF】使用Behavior以及ValidationRule实现表单校验

文章目录 使用ValidationRule实现检测用户输入EmptyValidationRule 非空校验TextBox设置非空校验TextBox设置非空校验并显示校验提示 结语 使用ValidationRule实现检测用户输入 EmptyValidationRule是TextBox内容是否为空校验,TextBox的Binding属性设置ValidationRu…

Centos7:Jenkins+gitlab+node项目启动(1)

安装Jenkins 虚拟机配置 需要的软件 https://download.csdn.net/download/myy2012/88668255 解压到目录 用xftp 上传 开始安装jdk rmp -ivh jdk-8u181-linux-x64.rpm 开始安装jenkins rmp -ivh jenkins-2.99-1.1.noarch.rpm 修改用户与端口(端口按需修改) vim /etc/sy…

Matlab之State Flow

打开方式 方式一:在命令窗口输入State Flow或者简写sf就能打开,并且会自动打开State Flow 的Library。从左到右分别是图表、真值表、状态转换表、例子、顺序查看,可以加入到Simulink当中。 方式二:从Simulink Library里面添加Sta…

Xshell 从github克隆项目:使用ssh方式。

接上文: https://blog.csdn.net/liu834189447/article/details/135247868 是能克隆项目了,但是速度太磕碜了,磕碜到难以直视。 找到另外一种办法,使用SSH克隆项目 速度嘎嘎猛。 首先得能进得去github网站,不能点上边…

Pikachu靶场 “Http Header”SQL注入

1. 先在 pikachu 打开 Http Header 注入模块,点击提示 查看登录 账号 和 密码,登陆后去 Burp 中找到登陆的 GET请求 2. 设置payload1 :在 User-Agent最后 输入 查看 数据库名 or updatexml(1,concat(0x7e,database()),0) or 查看 用户名…

File Inclusion(Pikachu)

File Inclusion(local) 这里随便点击一个提交 观察url,显示是一个文件file1.php 可以直接通过url修改这个文件 找到自己的文件(本地文件)shell.php的路径写上去 就可以看到 File Inclusion(remote) 提交的是一个目标…

uni-app和Vue.js有什么区别?

Hello,大家好,我是咕噜铁蛋!在当今的前端开发领域,uni-app和Vue.js都是非常热门的技术。很多开发者经常在选择时感到困惑。今天铁蛋这篇文章讲和大家探讨这两者的区别,帮助各位在开发路上做出明智的选择。 1. uni-app是…

Java日期工具类时间校验

Java日期工具类时间校验 嘚吧嘚正则表达式版本一版本二版本三 SimpleDateFormat工具类 嘚吧嘚 时间校验这个问题,我在网上找了很多资料,有用正则表达式的、有用格式工具类的。🤨 其实都能实现时间校验,既然两种方式都能实现&…

【Java基础系列】equals方法使用与总结

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Python模拟动态星空

前言 今天,我们来用Python做个星空。 一、模拟星空 1,.首先导入所需要的库: from turtle import * from random import random, randint 2.初始画面: screen Screen() width, height 800, 600 screen.setup(width, height) screen.tit…

Kubernetes (四) 资源清单及yaml文件详解

一. 资源清单 二. 编写yaml文件及内容详解 常用命令 …

canvas随机绘制100个五角星

canvas实例应用100 专栏提供canvas的基础知识,高级动画,相关应用扩展等信息。 canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重要的帮助。 文章目录 示例…

【新资讯】《网络安全事件报告管理办法(征求意见稿)》正在公开征求意见

近年来网络安全事故频发,造成了不少损失和危害。为了减少网络安全事故的发生,规范网络安全事件的报告,国家互联网信息办公室根据《中华人民共和国网络安全法》等法律法规起草了《网络安全事件报告管理办法(征求意见稿)…

混合专家模型 (MoE) 详解

随着 Mixtral 8x7B (announcement, model card) 的推出,一种称为混合专家模型 (Mixed Expert Models,简称 MoEs) 的 Transformer 模型在开源人工智能社区引起了广泛关注。在本篇博文中,我们将深入探讨 MoEs 的核心组件、训练方法,…

智慧停车场:AI智能烟火识别算法在停车场的运用

随着新能源汽车的普及,智慧停车场也越来越多,但由于一些停车场并未进行充电桩改造升级,很多车主私拉电线,大大增加了消防安全隐患。如何保障停车场消防安全,保护居民财产安全? 一、方案概述 TSINGSEE青犀…

Web 3.0 是什么

第 1 章 明晰Web 3.0 从本章开始,就进入了本书的第一篇章,入门Web3.0,在第一篇章中将会让读者对Web3.0有一个整体的认知,为学习后面的章节打下基础。 在本章中,主要介绍的是Web的发展历史,包涵Web1.0、Web2.0、Web3.0的发展过程,以及资本为什么需要入场Web3.0、Web3.0…

.NET CORE 无法调试 当前不会命中断点

多个项目直接可以设置项目的属性->生成->输出的配置文件输出地址 然后路径统一输入该项目的bib/debug/.netcorex.x就可以了

推荐几个好用的开源电子表单设计器

1、Form.io Form.io是一个开源的纯JavaScript表单渲染器和API平台,为开发者提供了一种快速、灵活的方式来构建和管理表单驱动的应用程序。Form.io使用ES6和JavaScript实现(没有jQuery、Angular、React或任何其他框架依赖),将JSON模式渲染为web form表单…
最新文章