C# 6.0: Using i klasy statyczne oraz metody asynchroniczne w catch\finally

Dzisiaj znów kilka drobnych nowości z C# 6.0 Pierwsza z nich to możliwość połączenia using z klasami statycznymi, których sposób użycia przypomina trochę przestrzenie nazw. Zaprezentuję to na przykładzie klasy Console. Posiada ona kilka statycznych metod m.in. WriteLine:

Console.WriteLine("Hello World!");

W nowej wersji, będziemy mogli dołączyć każdą klasę statyczną, tak jak zwykłą przestrzeń nazw:

using System.Console;

namespace ConsoleApplication2
{  
    class Program
    {
        static void Main(string[] args)
        {
            WriteLine("Hello World!");
   
        }     
    }
}


Ze względu, że jest to zwykły using, możemy również:

using Helper=System.Console;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Helper.WriteLine("Hello World!");

        }
    }
}

Może to być bardzo przydatne, gdy mamy jakieś konflikty wśród nazw, które czasami zdarzają się dla helperów. Kod zdekompilowany z ILSpy nie powinien budzić zaskoczenia:

// ConsoleApplication2.Program
private static void Main(string[] args)
{
    Console.WriteLine("Hello World!");
}

Kolejną, dobrą zmianą jest możliwość korzystania z async\await w catch oraz finally. Poniższy kod nie skompilowałby się w poprzednich wersjach języka:

private async void Test()
{
  try
  {

  }
  catch
  {
      int result1 = await AsyncMethod();
  }
  finally
  {
      int result2 = await AsyncMethod();
  }
}

private Task<int> AsyncMethod()
{
  return Task.FromResult(5);
}

Możliwe z kolei zawsze było wywoływanie asynchronicznych metod (await) w try – co byłoby ogromnym ograniczeniem, gdyby było zabronione.

Jak widać, nie są to rewolucyjne zmiany, ale warto o nich pamiętać.

One thought on “C# 6.0: Using i klasy statyczne oraz metody asynchroniczne w catch\finally”

  1. Jeśli chodzi o konflikty nazw przy stosowaniu dyrektywy using to nie jest żadna nowość, bo w wcześniejszych wersjach języka można było stosować takie rozwiązanie.

    Pozdrawiam serdecznie.

Leave a Reply

Your email address will not be published.