C#面向对象,封装、继承、多态、委托与事件实例

一.面向对象封装性编程

创建一个控制台应用程序,要求:

1.定义一个服装类(Cloth),具体要求如下

(1)包含3个字段:服装品牌(mark),服装颜色(color),定价(price)

(2)一个接收3个参数的构造函数

(3)自定义函数Information,输出一个服装实例的所有信息。

2.在主类中实现如下功能

(1)调用构造函数,创建1个服装类的实例

(2)通过该实例调用Information方法,获取该实例信息。如图1所示。

 public class Cloth
 {
     // 字段
     public string mark;   // 服装品牌
     public string color;  // 服装颜色
     public decimal price; // 定价

     // 构造函数
     public Cloth(string mark, string color, decimal price)
     {
         this.mark = mark;
         this.color = color;
         this.price = price;
     }

     // 自定义函数Information,输出服装实例的所有信息
     public void Information()
     {
         Console.WriteLine($"服装品牌: {mark},颜色: {color},定价: {price}元");
     }
 }
 private static void Main(string[] args)
 {
     // 调用构造函数,创建一个服装类的实例
     Cloth newCloth = new Cloth("笨小孩", "蓝色", 300);

     // 通过该实例调用Information方法,获取该实例信息
     newCloth.Information();

     // 程序结束等待用户输入,以便查看输出信息
     Console.ReadLine();
 }

二、面向对象继承性编程

创建一个控制台应用程序,要求:

1.自定义一个Fruit类,添加name字段和构造函数,添加Info方法输出水果信息;

2.再定义一个Banana类,Banana类继承Fruit类,在Banana类中添加color字段和构造函数,再添加一个like方法;

3.测试类Main方法中实例化两个类对象,输出如图2所示。

// 自定义Fruit类
public class Fruit
{
    // 字段
    public string name;

    // 构造函数
    public Fruit(string name)
    {
        this.name = name;
    }

    // Info方法输出水果信息
    public void Info()
    {
        Console.WriteLine($"名称:{name}");
    }
}

// Banana类继承Fruit类
public class Banana : Fruit
{
    // 字段
    public string color;

    // 构造函数
    public Banana(string name, string color) : base(name)
    {
        this.color = color;
    }
    public void InfoCOLOR()
    {
        Console.WriteLine($"名称:{color}");
    }

    // like方法
    public void Like()
    {
        Console.WriteLine($"猴子喜欢吃{color}的{name}!");
    }
}
private static void Main(string[] args)
{
    // 实例化Fruit类对象
    Fruit fruit = new Fruit("香蕉");
    fruit.Info();

    // 实例化Banana类对象
    Banana banana = new Banana("香蕉", "黄色");
    banana.InfoCOLOR(); // 调用基类的InfoCOLOR方法
    banana.Like();

    // 等待用户输入,以便查看输出信息
    Console.ReadLine();
}

三、面向对象多态性编程。

创建一个控制台应用程序,要求:

1.定义一个Vehicle类,包含name字段和虚方法Wheel;

2.再定义一个Car类,继承Vehicle类,重写Wheel方法;

3.再定义一个Bike类,继承Vehicle类,重写Wheel方法;

4.测试类Main方法中,定义Vehicle数组,长度为3,实例化各类对象,输出如图3所示。

// 定义Vehicle基类
public class Vehicle
{
    public string Name { get; set; }

    // Vehicle类的构造函数
    public Vehicle(string name)
    {
        Name = name;
    }

    // 虚方法Wheel
    public virtual void Wheel()
    {
        Console.WriteLine($"{Name} 都有轮子");
    }
}

// Car类继承Vehicle类,并重写Wheel方法
public class Car : Vehicle
{
    public Car(string name) : base(name) { }

    // 重写Wheel方法
    public override void Wheel()
    {
        Console.WriteLine($"{Name} 有四个轮子");
    }
}

// Bike类继承Vehicle类,并重写Wheel方法
public class Bike : Vehicle
{
    public Bike(string name) : base(name) { }

    // 重写Wheel方法
    public override void Wheel()
    {
        Console.WriteLine($"{Name} 有两个轮子");
    }
}
private static void Main(string[] args)
{
    // 创建一个Vehicle类型的数组,长度为3
    Vehicle[] vehicles = new Vehicle[3];

    // 实例化各类对象并添加到数组中
    vehicles[0] = new Car("交通工具");
    vehicles[1] = new Bike("汽车");
    vehicles[2] = new Vehicle("自行车"); // 默认使用基类的Wheel方法

    // 遍历数组并调用Wheel方法
    foreach (var vehicle in vehicles)
    {
        vehicle.Wheel();
    }

    // 等待用户输入,以便查看输出信息
    Console.ReadLine();
}

四. 委托与事件

创建一个控制台应用程序,要求:

1.定义一个Monitor类和一个Student类,模拟收作业过程;

2.定义委托类型Mydele和事件Homework;

3.班长说开始收作业,学生响应消息交作业。输出如图4所示。

// 定义委托类型MyDelegate
    public delegate void MyDelegate(string message);

    // 定义事件Homework
    public class HomeworkEventArgs : EventArgs
    {
        public string Message { get; }

        public HomeworkEventArgs(string message)
        {
            Message = message;
        }
    }

    // 定义Monitor类
    public class Monitor
    {
        // 事件声明
        public event EventHandler<HomeworkEventArgs> Homework;

        // 开始收作业的方法
        public void StartCollectingHomework()
        {
            Console.WriteLine("班长说:‘开始收作业!’");

            // 检查是否有订阅者,并触发事件
            Homework?.Invoke(this, new HomeworkEventArgs("请交上作业!"));
        }
    }

    // 定义Student类
    public class Student
    {
        public string Name { get; }

        public Student(string name)
        {
            Name = name;
        }

        // 订阅事件并响应作业提交
        public void SubscribeHomeworkEvent(Monitor monitor)
        {
            monitor.Homework += OnHomeworkReceived;
        }

        // 事件处理方法
        private void OnHomeworkReceived(object sender, HomeworkEventArgs e)
        {
            Console.WriteLine($"{Name}说:‘好的,我这就交作业。’");
        }
    }
    private static void Main(string[] args)
    {
        // 创建Monitor对象
        Monitor monitor = new Monitor();

        // 创建Student对象
        Student student1 = new Student("学生A");
        Student student2 = new Student("学生B");

        // 学生订阅收作业事件
        student1.SubscribeHomeworkEvent(monitor);
        student2.SubscribeHomeworkEvent(monitor);

        // 班长开始收作业,触发事件
        monitor.StartCollectingHomework();

        Console.ReadLine(); // 等待用户输入,以便查看输出信息
    }

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

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

相关文章

【springboot】读取外部的配置文件

【springboot】读取外部的配置文件 一、使用场景二、代码实现&#xff08;一&#xff09;application.yml 的配置&#xff08;二&#xff09;编辑 customer.yml&#xff08;三&#xff09;自定义方法读取外部配置文件&#xff08;四&#xff09;使用外部配置文件的配置 一、使用…

解锁 Vue 项目中 TSX 配置与应用简单攻略

在 Vue 项目中配置 TSX 写法 在 Vue 项目中使用 TSX 可以为我们带来更灵活、高效的开发体验&#xff0c;特别是在处理复杂组件逻辑和动态渲染时。以下是详细的配置步骤&#xff1a; 一、安装相关依赖 首先&#xff0c;我们需要在命令行中输入以下命令来安装 vitejs/plugin-v…

游戏引擎学习第22天

移除 DllMain() 并成功重新编译 以下是对内容的详细复述与总结&#xff1a; 问题和解决方案&#xff1a; 在编译过程中遇到了一些问题&#xff0c;特别是如何告知编译器不要退出程序&#xff0c;而是继续处理。问题的根源在于编译过程中传递给链接器的参数设置不正确。原本尝试…

【C#设计模式(15)——命令模式(Command Pattern)】

前言 命令模式的关键通过将请求封装成一个对象&#xff0c;使命令的发送者和接收者解耦。这种方式能更方便地添加新的命令&#xff0c;如执行命令的排队、延迟、撤销和重做等操作。 代码 #region 基础的命令模式 //命令&#xff08;抽象类&#xff09; public abstract class …

QT6学习第四天 感受QT的文件编译

QT6学习第四天 感受QT的文件编译 使用纯代码编写程序新建工程 使用其他编辑器纯代码编写程序并在命令行运行使用 .ui 表单文件生成界面使用自定义 C 窗口类使用现成的QT Designer界面类 使用纯代码编写程序 我们知道QT Creator中可以用拖拽的方式在 .ui 文件上布局&#xff0c…

【SpringBoot】28 API接口防刷(Redis + 拦截器)

Gitee仓库 https://gitee.com/Lin_DH/system 介绍 常用的 API 安全措施包括&#xff1a;防火墙、验证码、鉴权、IP限制、数据加密、限流、监控、网关等&#xff0c;以确保接口的安全性。 常见措施 1&#xff09;防火墙 防火墙是网络安全中最基本的安全设备之一&#xff0c…

4——单页面应用程序,vue-cli脚手架

单页面应用程序(英文名:Single Page Application)简称 SPA,顾名 思义,指的是一个 Web 网站中只有唯一的一个 HTML 页面,所有的功能与交互都在这唯一的一个页面内完成。 1、脚手架 ① 什么是脚手架 vue-cli 是 Vue.js 开发的标准工具&#xff61;它简化了程序员基于 webpack …

小程序 - 个人简历

为了让招聘人员快速地认识自己&#xff0c;可以做一个“个人简历”微信小程序&#xff0c; 展示自己的个人信息。 下面将对“个人简历”微信小程序进行详细讲解。 目录 个人简历 创建图片目录 页面开发 index.wxml index.wxss 功能实现截图 总结 个人简历 创建图片目录…

BUUCTF—Reverse—helloword(6)

一道安卓逆向的签到题 下载附件 使用JADX-gui反编译工具打开&#xff08;注意配环境&#xff09;&#xff0c;找到主函数 jadx 本身就是一个开源项目&#xff0c;源代码已经在 Github 上开源了 官方地址&#xff1a;GitHub - skylot/jadx: Dex to Java decompiler 发现flag …

单点登录深入详解之设计方案总结

基于cookie的单点登录解决方案 概述 用户登录之后 , 将认证信息存储至 Cookie &#xff0c;当再次访问本服务或者访问其他应用服务时&#xff0c;直接从 Cookie 中传递认证信息&#xff0c;进行鉴权处理。 问题 1. 如何保障Cookie内用户认证信息的安全性? 第一, Cookie…

JSONArray 与Object 之间的转换

PageResult<JSONArray> pageResult new PageResult<>();// 查出来的数据 JSONArray resultArray new JSONArray(); ject data new JSONObject();data.put("code", code); resultArray.add(data);// 将resultArray数据放入JSONArray,不是再包装成一个 …

cangjie (仓颉) vscode环境搭建

sdk下载 下载中心-仓颉编程语言官网 可选择半年更新版&#xff0c;不用申请。目前版本&#xff1a;0.53.13 &#xff0c;选择不同平台压缩包下载解压到任意位置即可 补充下载&#xff0c;vscode插件解压后&#xff0c;在vscode扩展中选择从vsix安装&#xff0c;安装后新增名为…

SmartSQL:一款方便、快捷的数据库文档查询、导出工具

&#x1f6a9; 项目介绍 SmartSQL 是一款方便、快捷的数据库文档查询、导出工具&#xff01;从最初仅支持SqlServer数据库、CHM文档格式开始&#xff0c;通过不断地探索开发、集思广益和不断改进&#xff0c;又陆续支持Word、Excel、PDF、Html、Xml、Json、MarkDown等文档格式…

IT监控 | Oracle云监控全解析

Oracle云(Oracle Cloud)是Oracle公司提供的云服务平台&#xff0c;涵盖了IaaS、PaaS、SaaS和DaaS&#xff0c;支持企业在云中构建、部署、集成和扩展应用&#xff0c;为企业提供了管理服务器、应用程序、存储、网络和数据中心的全面控制能力。 跟踪Oracle云基础设施的关键组件将…

攻防世界-web ics-06 [解法思路]

进入环境 点击左边的列表只有报表中心有反应 注意看url直接就是index.php?id1 我先试了sqlmap不行&#xff0c;然后就沉淀了一下 想到了id后面的参数问题&#xff0c;我谁便改了几个数都没反应 就想着用bp抓包爆一下这个参数&#xff0c;用了一个数字10000的字典 发现2333…

zotero安卓测试版下载和使用

2023年年底&#xff0c;Zotero官方就已经推出了安卓版的测试版Zotero for Android (beta),&#xff0c;但名额有限且只能通过Google商店下载。此外&#xff0c;还有一些第三方开发的安卓应用&#xff0c;如Zoo for Zotero、ZotDroid等。 在首次使用Zotero安卓版时&#xff0c;用…

洛谷 P1722 矩阵 II C语言 记忆化搜索

题目&#xff1a; https://www.luogu.com.cn/problem/P1722 我们按照案例画一下 我们会发现&#xff0c;会出现重复的子结构。 代码如下&#xff1a; #include<iostream> using namespace std; int mem[300][300]; int n; int f[305][305]; int dfs(int x,int red,…

MCU(一) 时钟详解 —— 以 GD32E103 时钟树结构为例

微控制器 (MCU) 的时钟系统是系统运行的核心&#xff0c;它提供了各模块所需的时钟信号。本文以 GD32E103 系列 MCU 为例&#xff0c;详细讲解其 时钟树结构&#xff08;Clock Tree&#xff09;。通过理解时钟源、分配与预分频器设置&#xff0c;可以灵活配置系统时钟以实现高性…

[HarmonyOS] 解决HMRouter路由地址无法抽取的问题

解决HMRouter路由地址无法抽取的问题 背景 最近开始学习HarmonyOS开发&#xff0c;搭建项目的时候采用了 HMRouter 路由框架&#xff0c;在项目里使用到路由跳转&#xff0c;官方链接在这&#xff1a; https://gitee.com/hadss/hmrouter/blob/master/HMRouterLibrary/README…

转录组数据挖掘(生物技能树)(第11节)下游分析

转录组数据挖掘&#xff08;生物技能树&#xff09;&#xff08;第11节&#xff09; 文章目录 R语言复习转录组数据差异分析差异分析的输入数据操作过程示例一&#xff1a;示例二&#xff1a;示例三&#xff1a;此代码只适用于人的样本 R语言复习 #### 读取 ####dat read.deli…