C# 为了封装起见,添加这十行。这样,RangeMissing就成了你们班上的一件大事,没有人知道(也不应该知道)是什么导致了它……是的,我认为你/我们需要知道设计以及你想要实现@Henkholtman good one:)+1来完成#1而不发生内存泄漏,您可能

C# 为了封装起见,添加这十行。这样,RangeMissing就成了你们班上的一件大事,没有人知道(也不应该知道)是什么导致了它……是的,我认为你/我们需要知道设计以及你想要实现@Henkholtman good one:)+1来完成#1而不发生内存泄漏,您可能,c#,events,C#,Events,为了封装起见,添加这十行。这样,RangeMissing就成了你们班上的一件大事,没有人知道(也不应该知道)是什么导致了它……是的,我认为你/我们需要知道设计以及你想要实现@Henkholtman good one:)+1来完成#1而不发生内存泄漏,您可能希望实现一个自定义事件,并计算remove实现中剩余处理程序的数量。这与选项2不同,因为您仍然替换包装器发送器。还要注意,选项#2允许privatecheckbook对象通过sender参数泄漏给所有订阅者。另外,不需要null检查吗?你说得对


为了封装起见,添加这十行。这样,RangeMissing就成了你们班上的一件大事,没有人知道(也不应该知道)是什么导致了它……是的,我认为你/我们需要知道设计以及你想要实现@Henkholtman good one:)+1来完成#1而不发生内存泄漏,您可能希望实现一个自定义事件,并计算
remove
实现中剩余处理程序的数量。这与选项2不同,因为您仍然替换包装器
发送器
。还要注意,选项#2允许
private
checkbook对象通过
sender
参数泄漏给所有订阅者。另外,不需要
null
检查吗?你说得对,我忘记了
null
检查。我喜欢使用
委托{}
的“技巧”来避免它。@svick实际上我喜欢
选项2
,因为它更具可读性。忽略private
checkbook
对象泄漏这一事实,这种方法还有其他问题吗?要在没有内存泄漏的情况下实现#1,您可能需要实现一个自定义事件,并计算
remove
实现中剩余的处理程序的数量。这与选项2不同,因为您仍然替换包装器
发送器
。还要注意,选项#2允许
private
checkbook对象通过
sender
参数泄漏给所有订阅者。另外,不需要
null
检查吗?你说得对,我忘记了
null
检查。我喜欢使用
委托{}
的“技巧”来避免它。@svick实际上我喜欢
选项2
,因为它更具可读性。忽略private
checkbook
对象泄漏这一事实,这种方法还有其他问题吗?
MyClass myInstance = ...
... 
myInstance.checkbook.RangeMissing += new EventHandler<RangeMissingEventArgs>(RangeMissing);
class MyClass
{
    public event EventHandler<RangeMissingEventArgs> CheckbookRangeMissing =
        delegate { };

    public MyClass()
    {
        // initialize checkbook

        checkbook.RangeMissing += OnCheckbookRangeMissing;
    }

    private void OnCheckbookRangeMissing(object sender, EventArgs e)
    {
        CheckbookRangeMissing(this, e)
    }
}
class MyClass
{
    public event EventHandler<RangeMissingEventArgs> CheckbookRangeMissing 
    {
        add
        {
            checkbook.RangeMissing += value;
        }
        remove
        {
            checkbook.RangeMissing -= value;
        }
    }
}
IObservable<DataType> RangeMissing;
public IObservable<DataType> RangeMissing {get{return _privateField.RangeMissing;} }