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

本文关键字:自定义 锁定 语句 创建 | 更新日期: 2023-09-27 18:18:30

我想为 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();
   }
}

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

不能在 C# 中创建自己的语句。你可以来尝试/最后最接近的是using语句:

using (lockObject.AcquireReadToken())
{
}

其中AcquireReadToken()将获取读锁定,并返回一个在释放锁时释放锁的IDisposable

你应该尝试一下ILWeaving。我还没有尝试过,但是使用ILWeaving可以完成很多"魔术"。我使用NotifyPropertyWeaver,它使用ILWeaving注入代码。

NotifyPropertyWeaver

参考此问题

什么是IL编织?

您可以使用以下方法之一在 ILWeaving 中执行此操作

  • 后锋利 http://www.sharpcrafters.com/
  • 福迪 http://code.google.com/p/fody/
  • 生塞西尔 http://www.mono-project.com/Cecil

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

也就是说,当然,除非您有兴趣了解 IL 操作。在这种情况下,请:)