如何在 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# 中创建自己的语句。你可以来尝试/最后最接近的是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 操作。在这种情况下,请:)