空的只读操作委托
本文关键字:操作 只读 | 更新日期: 2023-09-27 17:56:32
在我们的代码中有很多地方使用了() => {}
(在第三方库的方法中Action
参数是必需的)。
为了使代码更简洁,我创建了以下类:
public static class Empty
{
public static readonly Action Action = () => {};
}
现在它更好了:
Alert.Show(title, message, Empty.Action);
问题是这种重构会导致任何问题吗?我确定没有,但你可能知道可能的副作用。或者您可能知道这里更好的代码改进?
这种变化在技术上是可以观察到的:总是有可能某些代码间接比较两个new Action(() => {})
实例的相等性,并且它们以前不会比较相等,现在它们这样做了。
例如,如果您公开了一个public event Action X;
,则可以确保将其初始化为() => {}
以确保它永远不会null
,并从代码中删除任何null
检查。如果将其更改为 Empty.Action
,则恶意代码可能会写入X -= Empty.Action;
,从而导致您自己的代码中NullReferenceException
事件被调用。
但是在编写良好的代码中,重构应该没有任何区别。
这不会引起任何问题,因为它等效于定义静态方法并在程序集中多次引用它