如何在c#中包装函数与在C中使用内联头函数相同

时间:2012-04-22 08:37:39

标签: c#

我正在c#中编写一些具有函数

的类
Print(string s)

在上一个版本中,我发现这个函数从许多线程调用,并且每次调用此函数都应该被锁定。在C语言中,我可以将此功能重命名为

PrintA(string s) 

并将头文件更改为

#define Print(a) {Lock(PrintA) //
                  { //
                      PrintA(a) //
                  } //
                 } 

有可能在C#中写这样的东西吗? 我只是想在整个代码中改变一个地方而不是多个地方。

2 个答案:

答案 0 :(得分:1)

C#中没有宏。要向方法添加同步,可以使用:

void Print(string s)
{
    lock (lockObject) { PrintA(s); }
}

您需要定义一个锁定对象,只需在您的类中添加一个字段

private readonly object lockObject = new object();

或者您可以使用

[MethodImpl(MethodImplOptions.Synchronized)]
void Print(string s) { ... }

相当于将lock(this)添加到方法中。前者更为可取,因为锁定对象是私有的,只有你可以锁定它。

答案 1 :(得分:0)

如果要锁定整个方法,可以使用[MethodImpl(MethodImplOptions.Synchronized)]属性:

进行装饰
[MethodImpl(MethodImplOptions.Synchronized)]
public void Print(string s)
{
    ...
}

对于更具体的控制,您必须在代码块上使用lock