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

发布于:2024-11-28 ⋅ 阅读:(20) ⋅ 点赞:(0)

一.面向对象封装性编程

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

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