C#事件挣扎

时间:2015-09-01 12:32:39

标签: c# events

我试图写一个简单的代码,它包含火车停止或开车时的事件 我的应用程序一直在崩溃,同时说我试图使用null事件。 课程类:

public delegate void trainHandler();

class Program
{
    static void Main(string[] args)
    {
        Train e = new Train();
        e.Boxcar += new trainHandler (Message);
        Console.WriteLine("Welcome to the train, next stop London!");
        string choice = "";
        do
        {
            Console.WriteLine("D-Drive\nS-Stop\nE-Exit ");
            choice = Console.ReadLine().ToUpper();
            switch (choice)
            {
                case "D":
                    Train q = new Train();
                    q.Driving();
                    break;
                case "S":
                    Train q1 = new Train();
                    q1.Stopping();
                    break; 

            }
        } while (choice != "E");
    }
    static void Message()
    {
        Console.WriteLine("Thanks for riding our train!");
    }
}

新课程:

class Train
{
    public event trainHandler Boxcar;

    public void Driving()
    {
        Console.WriteLine("The train took off!");
        if (Boxcar != null)
        {
            Boxcar(); 
        }

    }
    public void Stopping()
    {
        Console.WriteLine("Train stoped, get down!");
        if (Boxcar != null)
        {
            Boxcar(); 
        }

    }
}

2 个答案:

答案 0 :(得分:1)

您正在每个case语句中创建一个 new 列,这些语句都没有附加事件处理程序。更改您的开关以触发在程序开始时创建的列车上的事件:

switch (choice)
{
    case "D":
        e.Driving();
        break;
    case "S":
        e.Stopping();
        break; 
}

答案 1 :(得分:1)

问题在于,您将事件分配给处理程序的Train e = new Train();与您调用TrainDrive <的实例不同Stopping个实例/ p>

如果您希望调用活动,则需要在Drive实例上调用Stoppinge,或者为您在自己的实例中创建的新实例分配事件处理程序switch