Docenisz następujące dwa cukry składniowe:Czy ta funkcja istnieje? Definiowanie własnych klamrowych w C#
lock(obj)
{
//Code
}
same as:
Monitor.Enter(obj)
try
{
//Code
}
finally
{
Monitor.Exit(obj)
}
i
using(var adapt = new adapter()){
//Code2
}
same as:
var adapt= new adapter()
try{
//Code2
}
finally{
adapt.Dispose()
}
Wyraźnie pierwszy przykład w każdym przypadku jest bardziej czytelny. Czy istnieje sposób na zdefiniowanie tego rodzaju rzeczy samodzielnie, w języku C# lub w IDE? Powodem, dla którego pytam, jest to, że istnieje wiele podobnych zastosowań (długiego rodzaju), które skorzystałyby na tym, np. jeśli używasz programu ReaderWriterLockSlim, potrzebujesz czegoś bardzo podobnego.
EDIT 1:
Zostałem poproszony o podanie przykładu, więc dam mu szansę:
myclass
{
ReaderWriterLockSlim rwl = new ReaderWriterLockSlim();
void MyConcurrentMethod()
{
rwl.EnterReadLock();
try{
//Code to do in the lock, often just one line, but now its turned into 8!
}
finally
{
rwl.ExitReadLock();
}
}
}
//I'd rather have:
void MyConcurrentMethod()
{
rwl.EnterReadLock()
{
//Code block. Or even simpler, no brackets like one-line ifs and usings
}
}
Oczywiście trzeba by dać kilka myśli, jak korzystać z TryEnterReadLocks i tego rodzaju rzeczy z zwrotami. Ale jestem pewien, że możesz coś wymyślić.
Można emulować obciążenie rzeczy za pomocą konstruktora jako "pre-block" i Dispose() jako „post-bloku "funkcja. – Dykam
Czy możesz wyjaśnić, co przez to rozumiesz? – Carlos
Tutaj możesz: http://stackoverflow.com/questions/2882983/does-this-feature-exist-defining-my-own-curly-brackets-in-c/2932023#2932023 – Dykam