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?

questionAnswers(6)

yourAnswerToTheQuestion