如何解决C# 事件处理程序不可用于其他引用
我有一个示例类。它有一个附有事件处理程序的 ObservableCollection。
class SomeItem
{
public ObservableCollection<Thing> Things = new ObservableCollection<Thing>();
private SomeEventHandler(object Sender,NotifyCollectionChangedEventArgs E)
{
//do something
}
public SomeItem()
{
this.Things.CollectionChanged += SomeEventHandler;
}
}
我正在执行以下代码:
SomeItem Instance = new SomeItem();
Instance.Things.Add(new Thing()); // SomeEventHandler executed;
SomeItem AnotherReference = Instance;
AnotherReference.Things.Add(new Thing()); // SomeEventHandler NOT executed
如果从 AnotherReference 访问集合,为什么不执行事件处理程序?
解决方法
我无法重现该问题。此代码按预期工作。
using System;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args) {
SomeItem Instance = new SomeItem();
Instance.Things.Add(new Thing()); // SomeEventHandler executed;
SomeItem AnotherReference = Instance;
AnotherReference.Things.Add(new Thing()); // SomeEventHandler ALSO executed
}
}
class Thing {
}
class SomeItem
{
public ObservableCollection<Thing> Things = new ObservableCollection<Thing>();
private void SomeEventHandler(object sender,NotifyCollectionChangedEventArgs e) {
Console.WriteLine("Hello from SomeEventHandler");
}
public SomeItem() {
this.Things.CollectionChanged += SomeEventHandler;
}
}
}
结果:
Hello from SomeEventHandler
Hello from SomeEventHandler
Press any key to continue.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。