Naprawdę przeszkadza mi konieczność umieszczania bloków using
w języku C#. To nie jest eleganckie i zajmuje dużo miejsca. W niektórych przypadkach wydaje się to nieuniknione, ponieważ muszę zadeklarować zmienne różnych typów danych, ale wydaje się, że uproszczenie powinno być możliwe w przypadku pojedynczego typu. Co mam na myśli przez "przypadek jednego typu", to gdy kilka zmiennych tego samego typu jest zadeklarowanych szeregowo. Oto przykład tego, co mówię:Złomowanie w C# przy użyciu bloków
class Program
{
static void Main(string[] args)
{
using (A a = new A("a"), b = new A("b"))
{
}
}
class A : IDisposable
{
string n = null;
public A(string name)
{
n = name;
Console.WriteLine(String.Format("Creating {0}", n));
}
public void Dispose()
{
Console.WriteLine(String.Format("Disposing {0}", n));
}
}
}
Sposób chcę to do pracy jest to, że a
jest zbudowany przed b
, a b
jest umieszczony przed a
. Niestety nie wydaje się, aby w specyfikacji C# był jakikolwiek kierunek, w jaki sposób powinien się on faktycznie odbywać. Wydaje się, że kompilator C# Microsoft traktuje go tak, jak to jest wyjście działa powyższy program:
Creating a
Creating b
Disposing b
Disposing a
Jednak nie mam możliwości zapewnienia, że jest to zachowanie deterministyczne. Czy ktoś może potwierdzić lub odrzucić pomysł, że ta sekwencja jest deterministyczna? Referencje byłyby świetne. I oczywiście, jeśli jest podatny na złamanie (nieudokumentowane itp.), Prawdopodobnie nie jest to użyteczne, ale dobrze o tym wiedzieć.
Istnieje już podobne pytanie dotyczące deterministic disposal, które mówi o przypadku wielu typów i rozumiem, że nie ma tu prawdziwego rozwiązania poza sprytnymi sztuczkami składni. Większość odpowiedzi tam jednak nie trafia. Moje pytanie dotyczy tylko przypadku jednego typu i czy to zbycie jest deterministyczne i niezawodne, czy nie. Dzięki.
Alternatywa jest brzydsza IMHO –