2011-12-22 14 views
2

try finallyブロックを生成するために、C#コンパイラ用のカスタム文を作成します。 ロックステートメントと同じです。Cでカスタムロックステートメントを作成するにはどうすればよいですか?

Forexample

private readonly ReaderWriterLockSlim _lockObject 

private void MyMethod() 
{ 
    MyWriteLock(lockObject) 
    { 

    } 
} 

private void MyMethod2() 
{ 
    MyReadLock(lockObject) 
    { 

    } 
} 

コンパイラは、C#で、独自の文を作成することはできません私

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

どのようなコードスニペットについて? [IntelliSenseコードスニペットの作成と使用](http://msdn.microsoft.com/en-us/library/ms165392(v = VS.100).aspx) – sll

答えて

5

次のコードを生成する必要があります。あなたは試してみるために来ることができる最も近い/ついにusing文です:AcquireReadToken()は読み取りロックを獲得し、それが配置されていますと、ロックを解除しIDisposableを返します

using (lockObject.AcquireReadToken()) 
{ 
} 

+0

Roslynを使用することができます。 – user960567

2

試してみてください。ILWeaving私はそれを試みていませんが、ILWeavingを使って多くの「魔法」を行うことができます。私はコードを注入するためにILWeavingを使用するNotifyPropertyWeaverを使用します。

NotifyPropertyWeaver

What is IL Weaving?

+0

別のオプションがありますポストシャープを使う – Sascha

0

この質問を参照してくださいあなたは、次の

は、しかし、私ははるかに簡単な解決策になる@JonSkeetにより示唆されるように「を使用して」ステートメントを利用して、この場合には思います。

ILマニピュレーションについて学ぶことに興味がない限り、もちろんです。どの場合はそれを行ってください:)

関連する問題