gpt4 book ai didi

c# - 设置属性时换出事件的最优雅方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 19:36:04 24 4
gpt4 key购买 nike

在进行基于组件的开发时,我发现自己经常这样做:

public class SomeClass
{
SomeOtherClass foo;

public SomeOtherClass Foo
{
get { return foo; }
set {
if (value != foo) {
if (value != null) {
// subscribe to some events
value.SomeEvent += foo_SomeEvent;
}

if (foo != null) {
// unsubscribe from subscribed events
foo.SomeEvent -= foo_SomeEvent;
}

foo = value;
}
}
}

void foo_SomeEvent(object sender, EventArgs e)
{
// do stuff
}
}

有没有更优雅的方式来做这个事件“交换”?

(当然,如果 foo 是不可变的,整个问题就可以避免,但那样我就得不到任何可视化设计器的支持。)

最佳答案

我确实认为您当前的实现是完全可以接受的。它非常清晰易懂。


如果你想缩短代码,因为你经常这样做,你可以创建一个方法来完成它:

private void SwapEventHandler<T>(T a, T b, Action<T> subscribe, Action<T> unsubscribe)
where T : class
{
if (a != null)
subscribe(a);
if (b != null)
unsubscribe(b);
}

然后你可以写:

if (value != foo) 
{
SwapEventHandler(value,foo, (o) => o.SomeEvent += foo_SomeEvent, (o) => o.SomeEvent -= foo_SomeEvent );
foo = value;
}

关于c# - 设置属性时换出事件的最优雅方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1521869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com