如何在c#中创建自定义锁定语句?

时间:2011-12-22 09:07:24

标签: c#

我想为c#编译器创建自定义语句以生成try finally块。 就像锁定声明一样。

例如

private readonly ReaderWriterLockSlim _lockObject

private void MyMethod()
{
   MyWriteLock(lockObject)
   {

   }
}

private void MyMethod2()
{
   MyReadLock(lockObject)
   {

   }
}

编译器应该为我生成以下代码

private void MyMethod()
{
   try
   {
     lockObject.EnterWriteLock();
     .. statetments for the method    
   }
   finally 
   {
     _lockObject.ExitWriteLock();
   }
}

private void MyMethod2()
{
   try
   {
     lockObject.EnterReadLock();
     .. statetments for the method    
   }
   finally 
   {
     _lockObject.ExitReadLock();
   }
}

3 个答案:

答案 0 :(得分:5)

您无法在C#中创建自己的语句。最接近try / finally的是using语句:

using (lockObject.AcquireReadToken())
{
}

其中AcquireReadToken()将获得一个读锁定,并返回一个IDisposable,它会在处理时释放锁定。

答案 1 :(得分:2)

您应该尝试 ILWeaving 。我没有尝试过,但使用ILWeaving可以完成很多“魔术”。我使用 NotifyPropertyWeaver ,它使用ILWeaving来注入代码。

NotifyPropertyWeaver

参考此问题

What is IL Weaving?

答案 2 :(得分:0)

您可以使用以下

之一进行ILWeaving

但是我认为在这种情况下,使用@JonSkeet建议的'using'语句将是更简单的解决方案。

当然,除非您有兴趣了解IL操作。在这种情况下去吧:)