c#事件为空

本文关键字:事件 | 更新日期: 2023-09-27 18:15:29

我只是在一个项目中工作,我需要提出和处理自定义事件…我只是稍微简化了一下代码,得到了这样的东西:

class Car
{
    public int Speed { get; set; }
    public delegate void SpeedTooHigh(string message);
    public event SpeedTooHigh OnSpeedToHigh;
    public Car(int speed)
    {
        this.Speed = speed;
        if (speed >= 100)
        {
            if (this.OnSpeedToHigh != null)
            {
                this.OnSpeedToHigh("Car has a too high speed !");
            }
        }
    }
}

和我使用这个类的主类:

class Program
{
    static void Main(string[] args)
    {
        Car car = new Car(120, "Red", "Renault");
        car.OnSpeedToHigh += OnCarSpeedToHigh;
        Console.WriteLine("Test events");
        Console.ReadKey();
    }
    static void OnCarSpeedToHigh(string message)
    {
        Console.WriteLine(message);
    }
}

当我运行这个例子时,似乎一直"OnSpeedToHigh"在Car类中为空。我不明白为什么,因为我在主类中创建了这个类的实例,并将速度设置为大于100,以便"这个"。OnSpeedToHigh("Car has a too high speed !"))被调用。

这是否足以引发事件,例如实例化类并将速度设置为大于100 ?

请告诉我这件事。

c#事件为空

在构造函数中触发事件,但是直到对象构造完成之后才向事件添加事件处理程序。

由于在触发事件时尚未添加任何事件处理程序,因此该事件为空。

您可能不想在构造函数中触发事件,您根本不想使用事件,或者您希望事件是静态的,以便您可以在构造汽车之前添加事件处理程序。