|
|
1
25
微软似乎已经接受了这一点,因为现在在msdn上有一个类似的例子: |
|
|
2
13
实际上,你的提议很有意义,我只是想知道这是不是一个简单的方法,因为它最初是在仿制药之前设计的,或者是否有真正的原因。 |
|
|
3
12
Windows运行时(WinRT)引入了
MSDN文档是 here . |
|
4
5
我不同意以下说法:
其次,我强烈反对你的想法近乎“亵渎神明”,因为这是一个很好的想法。 |
|
|
5
5
我看了一眼新Winrt是如何处理这一问题的,并基于这里的其他观点,最后决定这样做:
考虑到在WinRT中使用typeventhandler这个名称,这似乎是向前迈进的最佳方式。 |
|
|
6
2
我认为这是一个很好的想法,微软可能根本没有时间或兴趣投资于改善这一点,例如当他们从ArrayList转移到基于泛型的列表时。 |
|
|
7
2
据我所知,“sender”字段总是指保存事件订阅的对象。如果我有自己的druchers,也会有一个字段保存足够的信息,以便在需要时取消订阅事件(*)(例如,考虑订阅“Collection Changed”事件的更改记录器;它包含两个部分,其中一个部分执行实际工作并保存实际数据,另一个部分提供公共接口包装器,主要部分可能包含对包装器部分的弱引用。如果包装器部分被垃圾收集,这意味着不再有任何人对正在收集的数据感兴趣,因此更改记录器应该取消订阅它接收到的任何事件)。 因为一个对象可能代表另一个对象发送事件,所以我可以看到一些潜在的有用性,比如有一个“sender”字段是对象类型的,并且有一个eventargs派生字段包含对应该对其执行操作的对象的引用。然而,“sender”字段的有效性可能受到这样一个事实的限制:对象无法从未知的发送者取消订阅。 (*)实际上,处理取消订阅的一种更简单的方法是为返回布尔值的函数提供一个多播委托类型;如果此类委托调用的函数返回true,则该委托将被修补以删除该对象。这意味着委托将不再是真正不可变的,但应该可以以线程安全的方式进行这种更改(例如,通过取消对象引用并让多播委托代码忽略任何嵌入的空对象引用)。在这种情况下,无论事件来自何处,发布和事件到已释放对象的尝试都可以非常干净地处理。 |
|
|
8
2
回想一下亵渎神明是使发送者成为对象类型的唯一原因(如果在VB 2005代码中省略了与之相反的问题,这是微软的一个错误imho),有人能提出将第二个参数固定为eventargs类型的理论动机吗?更进一步,在这种情况下,是否有充分的理由遵守微软的指导方针和惯例? 需要为我们想要在事件处理程序中传递的另一个数据开发另一个EventArgs包装器似乎很奇怪,为什么不能直接在那里传递该数据呢?考虑下面的代码部分 [例1 ]
[例2 ]
|
|
|
9
1
在当前情况下(发送者是对象),您可以轻松地将方法附加到多个事件:
如果发送方是通用的,则click事件的目标将不是button或label类型,而是control类型(因为该事件是在control上定义的)。因此,button类上的某些事件将具有类型控制的目标,其他事件将具有其他目标类型。 |
|
|
10
1
我不认为你想做的有什么问题。在很大程度上,我怀疑
如果您真的想对公共API进行这种更改,那么您可能需要考虑创建自己的base evenargs类。像这样:
然后你可以这样宣布你的事件
方法如下:
仍然可以订阅。 编辑
最后一句话让我有点想…实际上,您应该能够在不破坏任何外部功能的情况下实现您建议的内容,因为运行时向下转换参数没有问题。我还是倾向于
坚持的一个好处是
|
|
|
11
1
去争取它。对于非基于组件的代码,我经常将事件签名简化为
哪里
|
|
|
Mear1628 · vb.net从随机选择的端口号接收UDP 1 年前 |
|
|
user1946932 · .Net正则表达式在所有字符前添加空格 1 年前 |
|
|
user1946932 · 正则表达式:删除连续两个以上的<br>? 1 年前 |
|
|
Josh · 通过反思访问孩子的财产 1 年前 |
|
|
Khu RJ · 更新网格中的单元格-DevExpress网格控件 1 年前 |
|
|
Mick · VB.NET Regex。替换不起作用(数组未更新) 1 年前 |