c#编写火警事件与委托处理代码,当火灾发生时:自动报警+ 喷水+鸣叫。(加上触发条件,一个对象的行为导致多个对象做出不同反应)
时间: 2024-09-26 13:14:32 浏览: 24
在 C# 中,你可以使用委托(Delegate)和事件(Event)机制来模拟火灾事件的场景,让一个对象的行为(比如检测到火灾)引发一系列操作(如自动报警、喷水和鸣叫)。以下是简单的代码示例:
```csharp
using System;
// 定义一个抽象的消防设备接口
public interface IFireEquipment
{
event Action FireDetected;
}
// 报警系统
public class AlarmSystem : IFireEquipment
{
public void DetectFire()
{
Console.WriteLine("火灾被检测到,自动报警...");
OnFireDetected(); // 触发事件
}
protected virtual void OnFireDetected()
{
FireDetected?.Invoke();
}
}
// 喷水系统
public class Sprinkler : IFireEquipment
{
public void HandleAlarm()
{
Console.WriteLine("接收到报警信号,开始喷水...");
}
}
// 鸣叫声设备
public class Siren : IFireEquipment
{
public void SoundAlarm()
{
Console.WriteLine("发出紧急鸣叫...");
}
}
// 主程序
class Program
{
static void Main(string[] args)
{
// 创建实例并订阅事件
AlarmSystem alarm = new AlarmSystem();
alarm.FireDetected += () => { alarm.DetectFire(); };
Sprinkler sprinkler = new Sprinkler();
alarm.FireDetected += sprinkler.HandleAlarm;
Siren siren = new Siren();
alarm.FireDetected += siren.SoundAlarm;
// 模拟火灾发生
alarm.DetectFire();
}
}
```
在这个例子中,`AlarmSystem` 触发 `FireDetected` 事件,所有的实现了 `IFireEquipment` 接口的对象(这里是 `Sprinkler` 和 `Siren`)都会接到这个通知并执行相应的操作。