- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
到目前为止,在我对 c# 的有限使用中,我已经订阅了几个事件。为什么以下两个代码片段使用两个不同的词 EventHandler
和 ElapsedEventHandler
?
myProcess = new Process();
myProcess.StartInfo.FileName = @"notepad.exe";
myProcess.Exited += new EventHandler(MyProcessExited);
相比于:
myTimer = new System.Timers.Timer(tickLength);
myTimer.Elapsed += new ElapsedEventHandler(myTimer_Elapsed);
这些词 EventHandler
和 ElapsedEventHandler
是否特定于我正在使用其事件的对象?或者是否有一整套对象我必须使用“EventHandler”和不同的对象集我必须使用“ElapsedEventHandler”? (即对于对象集合 X,我们使用 xxxxxEventHandler
等)
最佳答案
Are these words EventHandler and ElapsedEventHandler specific to the object whose event I'm using?
这句话是代表的名字。它们特定于从对象传递的信息,该对象将事件引发给该事件的订阅者。阅读下面的事件、委托(delegate)和参数传递。
C# 中的事件是类在某个对象发生某些有趣的事情时向该类的客户端提供通知的一种方式。使用 delegates 声明事件.
所以,如果你想通知客户你的对象发生了一些有趣的事情,你可以声明委托(delegate):
public delegate void SomethingHappenedDelegate();
并在你的类中声明这种类型的事件:
class Foo
{
public event SomethingHappenedDelegate SomethingHappened;
// other code, which raises SomethingHappened event
// when something interesting happened
}
当这个类的客户想要收到有趣事件的通知时,他们应该订阅 SomethingHappened 事件。并且事件处理程序签名必须匹配事件类型(在本例中为 SomethingHappenedDelegate):
static void Main(string[] args)
{
Foo foo = new Foo();
foo.SomethingHappened += new SomethingHappenedDelegate(Foo_SomethingHappened);
}
// this method should be: void MethodName()
static void Foo_SomethingHappened()
{
// you notified, that something happened
}
当您需要在通知客户端时传递一些额外的数据时,您应该使用不同的委托(delegate)类型,它带有一些参数。例如,如果您想向客户端传递一些消息,请更改事件的委托(delegate)类型:
public delegate void SomethingHappenedDelegate(string message);
现在您应该更改事件处理程序以对应此委托(delegate)类型:
static void Foo_SomethingHappened(string message)
{
// you notified, that something happened and you recieved a message
}
另一个例子,如果我们想传递引发事件的对象实例,以及一些额外的参数消息和时间:
public delegate void SomethingHappenedDelegate(object sender, string message, DateTime time);
那么我们应该有具有相同签名的事件处理程序:
static void Main(string[] args)
{
Foo foo1 = new Foo();
foo1.SomethingHappened += new SomethingHappenedDelegate(Foo_SomethingHappened);
Foo foo2 = new Foo();
foo2.SomethingHappened += new SomethingHappenedDelegate(Foo_SomethingHappened);
}
// we use same event handler for all SomethingHappened events
static void Foo_SomethingHappened(object sender, string message, DateTime time)
{
Foo foo = sender as Foo; // now we get object, which raised event
// and we can use message and time
}
因此,所有事件都具有某种委托(delegate)类型。该委托(delegate)的定义描述了哪些参数应该接收方法,哪些将处理事件。在您的代码中,您使用了两个事件 - Process.Exited和 Timer.Elapsed .让我们看看这些事件是如何定义的:
public event EventHandler Exited;
public event ElapsedEventHandler Elapsed;
您可以在这里看到不同类型的代表:
public delegate void EventHandler(object sender, EventArgs e);
public delegate void ElapsedEventHandler(object sender, ElapsedEventArgs e);
从定义中可以看出,这些委托(delegate)具有相同的第一个参数(发送者)和不同的最后一个参数。因此,这些事件的处理程序也应该具有不同的签名,这些签名应该与这些委托(delegate)相匹配。
您可能想知道,为什么第二个参数的名称以 EventArgs 结尾。如果你想通知其他对象,SomethingHappened,那么在 C# 中存在以下约定:
SomethingHappened
SomethingHappenedEventArgs
.<SomethingHappenedEventArgs>
,或者它应该是名称为 SomethingHappenedEventHandler
的自定义委托(delegate)和签名无效(对象发送者,SomethingHappenedEventArgs e)阅读更多 here .
关于c# - EventHandler 和 ElapsedEventHandler 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10242591/
我想问一下EventHandler之间的区别和 EventHandler . 之前我实现了一个 EventHandler ,带有自定义 EventArgs,可以从用户控件传递到父页面。 我想我需要申请
在C#中使用和使用有根本区别吗 event EventHandler和 EventHandler因为它们都产生与我所看到的相同的效果,除了使用 event 关键字会在智能感知中为您提供不同的图标。 最
我向事件添加了一个方法,但现在想在某些情况下从这些事件上删除该方法: public MyClassConstructor() { otherClassObj.OnMyDataReceived
我向事件添加了一个方法,但现在想在某些情况下从这些事件上删除该方法: public MyClassConstructor() { otherClassObj.OnMyDataReceived
最近一直在想这段代码有没有什么显着的区别: public event EventHandler SomeEvent; 还有这个: public delegate void MyEventHandler
假设你有这样的方法 private void FireEvent(EventHandler eventHandler, T eventArgs, string name) { var hand
我正在使用 GWT MVP 来开发应用程序。我看到 GWT MVP 代码中可以有两种事件处理程序,但我不太确定应该在哪个地方使用哪种事件处理程序: 1) AppController 中的 Handle
我看到一些代码使用 -= new EventHandler(anEvent) ,你能告诉我与 ' += new EventHandler' 有什么不同吗? 谢谢 最佳答案 一个将委托(delegate
我遇到了这样的 jQuery 片段: selector.eventHandler(...some code...).eventHandler(...some code...); 它有什么作用? 最佳答
我试图在指定时间内淡出一个文本框。此代码适用于 Windows Phone,但不适用于 Windows 8 应用程序。我进行了更改以修复尽可能多的错误。但我无法解决其中一个问题:cannot impl
我正在尝试在 Windows Phone 应用程序中实现一个计时器。它在 Windows Phone 应用程序 (Silverlight) 中工作正常,但它在 Windows Phone 空白应用程序
两者有什么区别? object.ProgressChanged += new EventHandler(object_ProgressChanged) object.ProgressChanged +
我已经阅读了一些关于此的主题,但我仍然不知道如何解决我的问题。我来自 Java,大部分是 C# 的新手 我想在动画结束时附加监听器: myStoryBoard.Completed += new Eve
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Can I customize automatic event handler generation in
我正在使用 axon 2.3.1 ,我有一个聚合类 public class MyAggregate extends AbstractAnnotatedAggregateRoot { @Aggre
我将 C# 与 Xamarin 结合使用,在使用 EventHandler 时出现此错误: The type or namespace name 'EventHandler' could not be
我正在阅读有关 EventHandlers 的 .NET 文档,但不理解来自 https://learn.microsoft.com/en-us/dotnet/standard/events/ 的这段
我的目的是重用从 ComboBox 类继承的 SelectedValueChanged 事件(该事件又从 ListControl 类继承) 在下面的代码中:SelectedValueChanged 标
以下代码允许在两个场景之间切换。 import javafx.application.*; import javafx.event.ActionEvent; import javafx.event.E
我有一个作业,其中我应该创建一个应用程序,将货币从卡塔尔里亚尔转换为 3 种选择之一(美元、欧元或英镑)。 我想成为一个酷男孩,并为我的应用程序提供了背景、标题和图标。但这还不够,我还决定不使用提交按
我是一名优秀的程序员,十分优秀!