8

我只是在做一个需要引发和处理自定义事件的项目......我只是简化了一点代码并得到了这样的东西:

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);
    }
}

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

这足以引发事件、实例化类并将速度设置为大于 100 吗?

请让我知道这件事。

4

1 回答 1

16

您在构造函数中触发事件,但在构造对象之前不会向事件添加事件处理程序。

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

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

于 2013-05-24T20:10:45.577 回答