Young87

SmartCat's Blog

So happy to code my life!

游戏开发交流QQ群号60398951

当前位置:首页 >AI写作

c#题例-2025-07-15 17:58:31

当然可以!下面是一道**专家级别**的 C# 逻辑面试题,涉及 **委托、事件、闭包、线程安全和异步编程**等多个高级知识点:

---

### 🧠 面试题:实现一个线程安全的事件聚合器(Event Aggregator)

#### 背景:
在大型应用中,模块之间通常通过事件进行通信。为了降低耦合度,开发者经常使用 **事件聚合器模式(Event Aggregator)**。你被要求实现一个简单的线程安全的事件聚合器。

---

### ✅ 题目要求:

实现一个名为 `ThreadSafeEventAggregator` 的类,满足以下功能:

1. 支持订阅特定类型的事件(如 `string`, `int`, 自定义类型等)。
2. 支持发布事件,所有订阅者都应该收到通知。
3. 支持取消订阅。
4. 必须是线程安全的(多个线程可以同时订阅、取消订阅或发布事件)。
5. 不允许重复订阅同一个委托多次。
6. 使用泛型设计。

---

### 🔧 示例接口设计:

```csharp
public interface IEventAggregator
{
void Subscribe(Action handler);
void Unsubscribe(Action handler);
void Publish(T message);
}
```

---

### 💡 进阶问题(面试官追问):

1. 如果订阅者的处理函数执行时间很长,你会如何优化?
2. 如何支持弱引用防止内存泄漏?
3. 如何支持异步事件处理?
4. 如何支持事件优先级?

---

### 📌 参考答案提示:

- 使用 `ConcurrentDictionary` 存储不同类型的消息处理器集合。
- 每个消息类型维护一个 `ConcurrentBag` 或 `List`。
- 在调用时复制委托列表以避免并发修改异常。
- 使用 `lock` 或 `ReaderWriterLockSlim` 控制访问。
- 可以考虑使用 `IProgress` 或 `async/await` 扩展为异步版本。

---

如果你需要,我可以提供完整的参考实现代码。是否需要?

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇:无

下一篇: c#题例-2025-07-15 12:25:19

精华推荐