相关疑难解决方法(0)

.NET中的事件签名 - 使用强类型"发件人"?

我完全意识到我提出的建议并不遵循.NET准则,因此,仅凭这个原因可能是一个糟糕的想法.但是,我想从两个可能的角度考虑这个问题:

(1)我是否应考虑将此用于我自己的开发工作,100%用于内部目的.

(2)这是框架设计者可以考虑改变或更新的概念吗?

我正在考虑使用一个使用强类型"发送者"的事件签名,而不是将其键入"对象",这是当前的.NET设计模式.也就是说,而不是使用如下所示的标准事件签名:

class Publisher
{
    public event EventHandler<PublisherEventArgs> SomeEvent;
}
Run Code Online (Sandbox Code Playgroud)

我正在考虑使用一个使用强类型'sender'参数的事件签名,如下所示:

首先,定义一个"StrongTypedEventHandler":

[SerializableAttribute]
public delegate void StrongTypedEventHandler<TSender, TEventArgs>(
    TSender sender,
    TEventArgs e
)
where TEventArgs : EventArgs;
Run Code Online (Sandbox Code Playgroud)

这与Action <TSender,TEventArgs>并没有什么不同,但通过使用StrongTypedEventHandler,我们强制执行TEventArgs派生System.EventArgs.

接下来,作为示例,我们可以在发布类中使用StrongTypedEventHandler,如下所示:

class Publisher
{
    public event StrongTypedEventHandler<Publisher, PublisherEventArgs> SomeEvent;

    protected void OnSomeEvent()
    {
        if (SomeEvent != null)
        {
            SomeEvent(this, new PublisherEventArgs(...));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

上述安排将使订阅者能够使用不需要强制转换的强类型事件处理程序:

class Subscriber
{
    void SomeEventHandler(Publisher sender, PublisherEventArgs e)
    {           
        if (sender.Name == "John Smith")
        {
            // ...
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

.net c# vb.net events

106
推荐指数
5
解决办法
1万
查看次数

标签 统计

.net ×1

c# ×1

events ×1

vb.net ×1