如何在 C# 中包装函数,就像在 C 中使用内联标头函数一样
本文关键字:函数 一样 包装 | 更新日期: 2023-09-27 18:31:50
我正在用 c# 编写一些具有函数的类
Print(string s)
在上一版本中,我发现这个函数从许多线程调用,每次调用这个函数时都应该被锁定。在 C 语言中,我可以将此函数重命名为
PrintA(string s)
并将头文件更改为类似
#define Print(a) {Lock(PrintA) //
{ //
PrintA(a) //
} //
}
是否可以用 C# 编写这样的东西?我只想在整个代码中更改一个位置而不是多个位置。
C# 中没有宏。若要向方法添加同步,可以使用:
void Print(string s)
{
lock (lockObject) { PrintA(s); }
}
您需要定义一个锁定对象,只需向类添加一个字段即可
private readonly object lockObject = new object();
不太推荐使用 [MethodImpl(MethodImplOptions.Synchronized)]
,因为它使用 this
作为锁定对象,这意味着用户可能会干扰锁定逻辑并导致死锁。
如果要锁定整个方法,可以使用[MethodImpl(MethodImplOptions.Synchronized)]
属性来装饰它:
[MethodImpl(MethodImplOptions.Synchronized)]
public void Print(string s)
{
...
}
对于更具体的控件,您必须在代码块上使用lock
。