C#事件为空

时间:2013-05-24 20:08:08

标签: c# events delegates null

我正在开发一个项目,我需要提升并处理一个自定义事件......我只是简化了一些代码,得到了类似的东西:

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”始终为null。  而且我不明白为什么因为我在主类中创建这个类的实例并将速度设置为大于100,以便“this.OnSpeedToHigh(”Car具有太高的速度!“)”被调用。

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

请让我知道这件事。

1 个答案:

答案 0 :(得分:11)

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

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

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