我试图写一个简单的代码,它包含火车停止或开车时的事件 我的应用程序一直在崩溃,同时说我试图使用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();
}
}
}
答案 0 :(得分:1)
您正在每个case语句中创建一个 new 列,这些语句都没有附加事件处理程序。更改您的开关以触发在程序开始时创建的列车上的事件:
switch (choice)
{
case "D":
e.Driving();
break;
case "S":
e.Stopping();
break;
}
答案 1 :(得分:1)
问题在于,您将事件分配给处理程序的Train e = new Train();
与您调用Train
或Drive
<的实例不同Stopping
个实例/ p>
如果您希望调用活动,则需要在Drive
实例上调用Stopping
或e
,或者为您在自己的实例中创建的新实例分配事件处理程序switch