【发布时间】:2017-06-09 17:10:44
【问题描述】:
我正在学习委托和事件处理程序,因为我需要在我的代码中。在示例中,Class Test 生成消息 Hello, i'm an event!
从这个 Class 我需要调用 Class Test1 中的方法 Evento1,以生成消息 Hello ,我是另一个事件!但我做不到。
我尝试实例化 Class Test1 并调用该方法。调试器编译但第二条消息没有出现。
namespace Eventi1
{
// Delegate declaration
delegate void testEventHandler(object source, string message);
class Test
{
// Event
public event testEventHandler testEvento;
// Function that triggers the event
public void Evento(string message)
{
Console.WriteLine("Event!");
if (testEvento != null)
{ testEvento(this, message); }
Test1 evento = new Test1();
evento.Evento1("Hello, i'm another event!");
}
}
class Test1
{
// Event1
public event testEventHandler testEvento;
// Function that triggers the event
public void Evento1(string message)
{
Console.WriteLine("Event1!");
if (testEvento != null)
{ testEvento(this, message); }
}
}
public class EventSample
{
// Constructor
public EventSample() { }
static void Main()
{
// Classe instantiation
Test b = new Test();
// Event handler
//b.testEvento += new testEventHandler(onTestAction);
b.testEvento += onTestAction;
// Event invocation
b.Evento("Hello, i'm an event!");
}
// Function that triggers the event
public static void onTestAction(object source, string message)
{
Console.WriteLine("We're inside the event handler.");
Console.WriteLine("Messagge: " + message);
Console.ReadLine();
}
}
}
PS第二个问题给Aansari
class Test
{
public delegate void testEventHandler(object source, string message);
public event testEventHandler testEvento;
// Function that triggers the event
public void Evento(string message)
{
Console.WriteLine("Event!");
if (testEvento != null)
{ testEvento(this, message); }
Test1 evento = new Test1();
evento.testEvento += testEvento;
evento.Evento1();
}
}
class Test1
{
public delegate void testEventHandler(object source, string message);
public event testEventHandler testEvento;
// Function that triggers the event1
public void Evento1()
{
Console.WriteLine("Event1!");
if (testEvento != null)
{ testEvento(this, "Hello, i'm another event!"); }
}
}
public class EventSample
{
public EventSample() { }
static void Main()
{
Test b = new Test();
b.testEvento += onTestAction;
b.Evento("Hello, i'm an event!");
}
// Function that triggers the event
public static void onTestAction(object source, string message)
{
Console.WriteLine("We're inside the event handler.");
Console.WriteLine("Messagge: " + message + "\n");
Console.WriteLine("Press ENTER");
Console.ReadLine();
}
}
【问题讨论】:
-
我尝试实例化 Class Test1 并调用该方法。调试器编译,但没有出现第二条消息。 正确,因为您还没有订阅
Test1类中的testEvento(您只订阅了Test类中的事件)。请注意,您订阅的只是该特定实例的事件,而不是“跨类的通用命名事件”,甚至是同一类的多个实例。 -
谢谢你,但不幸的是,我对你告诉我的内容知之甚少。您能否以更简单的方式解释或更正代码。再次感谢
标签: c# class delegates event-handling