有没有办法在VB中翻译这段代码?大部分都很简单,但我无法想出一种覆盖事件处理程序的方法。
public class MTObservableCollection<T> : ObservableCollection<T>
{
public MTObservableCollection()
{
_DispatcherPriority = DispatcherPriority.DataBind;
}
public MTObservableCollection(DispatcherPriority dispatcherPriority)
{
_DispatcherPriority = dispatcherPriority;
}
private DispatcherPriority _DispatcherPriority;
public override event NotifyCollectionChangedEventHandler CollectionChanged;
protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
{
var eh = CollectionChanged;
if (eh != null)
{
Dispatcher dispatcher = (from NotifyCollectionChangedEventHandler nh in eh.GetInvocationList()
let dpo = nh.Target as DispatcherObject
where dpo != null
select dpo.Dispatcher).FirstOrDefault();
if (dispatcher != null && dispatcher.CheckAccess() == false)
{
dispatcher.Invoke(DispatcherPriority.DataBind, (Action)(() => OnCollectionChanged(e)));
}
else
{
foreach (NotifyCollectionChangedEventHandler nh in eh.GetInvocationList())
nh.Invoke(this, e);
}
}
}
}
答案 0 :(得分:2)
重写编辑:
一个对话,认为它是一个编译器实现snafu并建议解决方法:
http://social.msdn.microsoft.com/Forums/en/vblanguage/thread/ce30ceed-c260-4d99-b96d-5b7179466be8
这是我的(半)最终答案。
答案 1 :(得分:1)
在C#中覆盖事件甚至是错误的。 C# Programming Guide说:
不要在a中声明虚拟事件 基类并在a中覆盖它们 派生类。 C#编译器可以 没有正确处理这些 Microsoft Visual Studio 2008就是这样 无法预测订户是否 派生事件实际上是 订阅基类事件。
我想知道为什么框架类会违反此规则,甚至编译器允许它的原因。