面试题答案
一键面试- 定义委托和事件:
- 在C#中,委托是一种类型,它定义了方法的签名,事件是基于委托的一种特殊成员。
- 以下是定义委托和事件的示例代码:
// 定义委托
public delegate void MyEventHandler();
// 定义包含事件的类
public class MyEventPublisher
{
// 定义事件,基于上面的委托
public event MyEventHandler MyEvent;
}
- 编写实现事件触发调用多个方法的代码:
using System;
// 定义委托
public delegate void MyEventHandler();
// 定义包含事件的类
public class MyEventPublisher
{
// 定义事件,基于上面的委托
public event MyEventHandler MyEvent;
// 触发事件的方法
public void RaiseEvent()
{
MyEvent?.Invoke();
}
}
class Program
{
// 方法1
static void Method1()
{
Console.WriteLine("Method1被调用。");
}
// 方法2
static void Method2()
{
Console.WriteLine("Method2被调用。");
}
static void Main()
{
MyEventPublisher publisher = new MyEventPublisher();
// 订阅事件
publisher.MyEvent += Method1;
publisher.MyEvent += Method2;
// 触发事件
publisher.RaiseEvent();
// 取消订阅事件(如果需要)
publisher.MyEvent -= Method1;
publisher.RaiseEvent();
}
}
在上述代码中:
- 首先定义了一个
MyEventHandler
委托,它没有参数和返回值。 MyEventPublisher
类包含一个基于MyEventHandler
委托的MyEvent
事件。RaiseEvent
方法用于触发MyEvent
事件。在触发事件时,使用?
运算符来确保在事件有订阅者时才调用Invoke
方法,避免空引用异常。- 在
Main
方法中,创建了MyEventPublisher
的实例,并为MyEvent
事件订阅了Method1
和Method2
方法。当调用RaiseEvent
方法时,这两个方法会依次被调用。之后,取消了Method1
方法的订阅,再次调用RaiseEvent
方法时,只有Method2
方法会被调用。