如何知道触发事件的实例的指针

本文关键字:实例 指针 事件 何知道 | 更新日期: 2023-09-27 17:49:43

如何知道触发事件的实例的指针?我使用"对象发送者"作为事件的第一个参数,并对其进行强制转换。但是没有任何像"Tag"这样的属性可以帮助我区分不同的组件。

下面是我的示例代码:
SMSCclientSMPP[] smsCClientSMPP = new SMSCclientSMPP[10];
for (int i = 0; i < 10; i++)
{
    smsCClientSMPP[i] = new SMSCclientSMPP();
    smsCClientSMPP[i].OnTcpDisconnected += smsCclientSMPP_OnTcpDisconnected;
}
private void smsCclientSMPP_OnTcpDisconnected(object sender, tcpDisconnectedEventArgs e)
{
    SMSCclientSMPP obj = (SMSCclientSMPP)sender;
    // obj dosent have Tag field.
}

正如我所说的,obj没有任何使其与其他属性不同的属性。那么我怎么知道这个事件是由我的smsCClientSMPP数组的哪个项目触发的呢?

如何知道触发事件的实例的指针

我不确定你想要实现什么,也不知道这是否实际上回答了你的问题,但由于每个项目是一个不同的实例,它们应该有不同的GetHashCode()值:

obj.GetHashCode()

我不知道SMSCclientSMPP,但实现它的最简单方法是包装SMSCclientSMPP,创建一个带有新属性Tag或ID的自定义类来标识这些对象。

其他一切应该保持不变,您只需将SMSCclientSMPP替换为您的新类。当然,这只有在SMSCclientSMPP可以继承的情况下才能工作。