Zła praktyka? Niekanonowe użycie instrukcji c # za pomocą
C # mausing
instrukcja, szczególnie dla obiektów IDisposable. Przypuszczalnie każdy obiekt określony wusing
instrukcja będzie zawierać pewien rodzaj zasobu, który powinien zostać uwolniony deterministycznie.
Jednak wydaje mi się, że w programowaniu jest wiele projektów, które mają pojedynczy, określony początek i koniec, ale brakuje im wewnętrznej obsługi języka. Theusing
Konstrukcja daje możliwość wykorzystania wbudowanych funkcji edytora kodu, aby przynajmniej jasno i naturalnie podkreślić zakres takiego projektu lub operacji.
Mam na myśli rodzaj operacji, która często zaczyna się odBeginXXX()
iEndXXX()
metoda, chociaż istnieje wiele różnych smaków, takich jak wykonanie kodu asynchronicznego, które wymaga „startu” i „dołączenia”.
Weźmy ten naiwny przykład.
webDataOperation.Start();
GetContentFromHardDrive();
webDataOperation.Join();
// Perform operation that requires data from both sources
Co jeśli zamiast tego metoda Start zwróci obiekt, któregoIDisposable.Dispose
metoda wykonuje operację łączenia.
using(webDataOperation.Start()) {
GetContentFromHardDrive();
}
// Perform operation that requires data from both sources
Albo, jeszcze lepiej, to, co miałem na myśli: mam obiekt, który wykonuje wysoce wyspecjalizowane grafiki i maBegin()
iEnd()
metoda (projekt obecny również w DirectX i XNA). Zamiast...
using(blitter.BlitOperation()) {
// Do work
}
// Use result
Wydaje się, że jest bardziej naturalny i czytelny, ale jest niewskazany, ponieważ używaIDisposable
interfejs iusing
oświadczenie dla niezamierzonych celów? Innymi słowy, czy byłoby to na równi z owczytanie operatora w sposób nieintuicyjny?