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.rhkb.cn/news/480052.html

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

相关文章

养老院、学校用 安科瑞AAFD-40Z单相电能监测故障电弧探测器

安科瑞戴婷 Acrel-Fanny 安科瑞单相电能监测故障电弧探测器对接入线路中的故障电弧&#xff08;包括故障并联电弧、故障串联电弧&#xff09;进行有效的检测&#xff0c;当检测到线路中存在引起火灾的故障电弧时&#xff0c;探测器可以进行现场的声光报警&#xff0c;并将报警…

PAT甲级 1056 Mice and Rice(25)

文章目录 题目题目大意基本思路AC代码总结 题目 原题链接 题目大意 给定参赛的老鼠数量为NP&#xff0c;每NG只老鼠分为一组&#xff0c;组中最胖的老鼠获胜&#xff0c;并进入下一轮&#xff0c;所有在本回合中失败的老鼠排名都相同&#xff0c;获胜的老鼠继续每NG只一组&am…

[SWPUCTF 2021 新生赛]include

参考博客: 文件包含 [SWPUCTF 2021 新生赛]include-CSDN博客 NSSCTF | [SWPUCTF 2021 新生赛]include-CSDN博客 考点:php伪协议和文件包含 PHP伪协议详解-CSDN博客 php://filter php://filter可以获取指定文件源码。当它与包含函数结合时&#xff0c;php://filter流会被当…

spring boot3.3.5 logback-spring.xml 配置

新建 resources/logback-spring.xml 控制台输出颜色有点花 可以自己更改 <?xml version"1.0" encoding"UTF-8"?> <!--关闭文件扫描 scanfalse --> <configuration debug"false" scan"false"><springProperty …

Unity shaderlab 实现LineSDF

实现效果&#xff1a; 实现代码&#xff1a; Shader "Custom/LineSDF" {Properties{}SubShader{Tags { "RenderType""Opaque" }Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{floa…

PHP 去掉特殊不可见字符 “\u200e“

描述 最近在排查网站业务时&#xff0c;发现有数据匹配失败的情况 肉眼上完全看不出问题所在 当把字符串 【M24308/23-14F‎】复制出来发现 末尾有个不可见的字符 使用删除键或左右移动时才会发现 最后测试通过 var_dump 打印 发现这个"空字符"占了三个长度 &#xf…

Web会话安全测试

Web会话安全测试 - 知乎 1、会话ID不可预测性 【要求】 会话ID必须采用安全随机算法&#xff08;如SecureRandom&#xff09;生成&#xff0c;并且强度不得低于256位&#xff08;32字符&#xff09;&#xff0c;如采用Tomcat原生JSESSIONID【描述】 密码与证书等认证手段&…

springboot336社区物资交易互助平台pf(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 社区物资交易互助平台设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff…

富文本编辑器图片上传并回显

1.概述 在代码业务需求中&#xff0c;我们会经常涉及到文件上传的功能&#xff0c;通常来说&#xff0c;我们存储文件是不能直接存储到数 据库中的&#xff0c;而是以文件路径存储到数据库中&#xff1b;但是存储文件的路径到数据库中又会有一定的问题&#xff0c;就是 浏览…

结构体详解+代码展示

系列文章目录 &#x1f388; &#x1f388; 我的CSDN主页:OTWOL的主页&#xff0c;欢迎&#xff01;&#xff01;&#xff01;&#x1f44b;&#x1f3fc;&#x1f44b;&#x1f3fc; &#x1f389;&#x1f389;我的C语言初阶合集&#xff1a;C语言初阶合集&#xff0c;希望能…

学习ASP.NET Core的身份认证(基于Session的身份认证1)

ASP.NET Core使用Session也可以实现身份认证&#xff0c;关于Session的介绍请见参考文献5。基于Session的身份认证大致原理就是用户验证成功后将用户信息保存到Session中&#xff0c;然后在其它控制器中从Session中获取用户信息&#xff0c;用户退出时清空Session数据。百度基于…

题目 3209: 蓝桥杯2024年第十五届省赛真题-好数

一个整数如果按从低位到高位的顺序&#xff0c;奇数位&#xff08;个位、百位、万位 &#xff09;上的数字是奇数&#xff0c;偶数位&#xff08;十位、千位、十万位 &#xff09;上的数字是偶数&#xff0c;我们就称之为“好数”。给定一个正整数 N&#xff0c;请计算从…

人工智能如何改变你的生活?

在我们所处的这个快节奏的世界里&#xff0c;科技融入日常生活已然成为司空见惯的事&#xff0c;并且切实成为了我们生活的一部分。在这场科技变革中&#xff0c;最具变革性的角色之一便是人工智能&#xff08;AI&#xff09;。从我们清晨醒来直至夜晚入睡&#xff0c;人工智能…

MATLAB - ROS2 ros2genmsg 生成自定义消息(msg/srv...)

系列文章目录 前言 语法 ros2genmsg(folderpath)ros2genmsg(folderpath,NameValue) 一、说明 ros2genmsg(folderpath) 通过读取指定文件夹路径下的 ROS 2 自定义信息和服务定义来生成 ROS 2 自定义信息。函数文件夹必须包含一个或多个 ROS 2 软件包。这些软件包包含 .msg 文件…

LeetCode:19.删除链表倒数第N个节点

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;19.删除链表倒数第N个节点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表…

探索光耦:光耦安全标准解读——确保设备隔离与安全的重要规范

在现代科技日新月异的今天&#xff0c;光耦&#xff08;光电耦合器&#xff09;作为电子设备中不可或缺的隔离元件&#xff0c;其重要性不言而喻。它不仅在电源调控、工业自动化及医疗设备等关键领域大显身手&#xff0c;更是确保系统电气隔离与运行稳定的守护神。特别是在保障…

ubuntu+ROS推视频流至网络

目录 概述 工具 ros_rtsp 接受流 web_video_server 源码安装 二进制安装 ros接收rtsp视频流 总结 概述 ros_rtsp功能包可以将ros视频流以rtsp形式推送 web_video_server功能包可以将ros视频话题推HTTP流 rocon_rtsp_camera_relay可以接受同一网段下的rtsp视频流输出为…

如何在Python中进行数学建模?

数学建模是数据科学中使用的强大工具&#xff0c;通过数学方程和算法来表示真实世界的系统和现象。Python拥有丰富的库生态系统&#xff0c;为开发和实现数学模型提供了一个很好的平台。本文将指导您完成Python中的数学建模过程&#xff0c;重点关注数据科学中的应用。 数学建…

Hbase2.2.7集群部署

环境说明 准备三台服务器&#xff0c;分别为&#xff1a;bigdata141&#xff08;作为Hbase主节点&#xff09;、bigdata142、bigdata143确保hadoop和zookeeper集群都先启动好我这边的hadoop版本为3.2.0&#xff0c;zookeeper版本为3.5.8 下载安装包 下载链接&#xff1a;In…

【mac】终端左边太长处理,自定义显示名称(terminal路径显示特别长)

1、打开终端 2、步骤 &#xff08;1&#xff09;修改~/.zshrc文件 nano ~/.zshrc&#xff08;2&#xff09;添加或修改PS1&#xff0c;我是自定义了名字为“macminiPro” export PS1"macminiPro$ "&#xff08;3&#xff09;使用 nano: Ctrl o &#xff08;字母…