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 Vehicle3;

// 实例化各类对象并添加到数组中

vehicles0 = new Car("交通工具");

vehicles1 = new Bike("汽车");

vehicles2 = 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(); // 等待用户输入,以便查看输出信息

}

相关推荐
泡泡鱼(敲代码中)18 小时前
MySQL基础学习笔记:从数据模型到DDL全掌握
开发语言·数据库·笔记·学习·mysql
唐青枫18 小时前
别只会看日志:C#.NET SOS 调试扩展从 Dump 到内存泄漏排查
c#·.net
潜创微科技19 小时前
IT6520:USB-C 转 MIPI 高集成控制器,DP 1.4a 转 MIPI 单芯片搞定 4K120 显示
c语言·开发语言·低延迟·掌机·联阳
Escalating_xu20 小时前
【System V 信号量】从 P/V 原语到 Builder 封装:写出可控、可清理的进程互斥组件
java·linux·开发语言·jvm
傲世仙尊20 小时前
System V 进程间通信详解:共享内存、消息队列与信号量(CSDN博客)
linux·开发语言·c++
cvby20 小时前
C++11
开发语言·c++
ch.ju21 小时前
Java—idea知识:如何创建新项目
java·开发语言·intellij-idea
Evand J21 小时前
【MATLAB例程,图像滤波降噪12】加权中值滑动窗口滤波(WMF)图像降噪,包含滤波质量评价。附代码下载链接
开发语言·图像处理·人工智能·计算机视觉·matlab·滑动窗口·滤波
Tairitsu_H21 小时前
[C++] C++11类和STL的新特性
开发语言·c++·stl·c++11
承渊政道21 小时前
Python IDLE鸿蒙PC适配全记录:从Tkinter桌面程序到ArkUI原生开发闭环
开发语言·python·harmonyos·鸿蒙系统·桌面程序