C# 6.0: Using static [3/10]

Pomůcka, která vám umožní příkazem using „zpřístupnit“ statickou třídu tak, že lze volat její statické metody bez explicitního uvádění jména třídy:

using System.Console;
using System.Math;

class Program
{
    static void Main()
    {
        WriteLine(Sqrt(3*3 + 4*4));
        // odpovídá Console.WriteLine(Math.Sqrt(3*3 + 4*4));
    }
}

Zkrácenou syntaxi je samozřejmě možné použít jen tehdy, pokud je použitá metoda jediná.

Situace u extension metod

Extension metody jsou definovány na statické třídě, nová using konstrukce tím pádem umožňuje jemnější „zpřístupňování“ extension metod jednotlivých statických tříd aniž bychom museli zpřístupnit celý namespace jako dosud.

using System.Linq.Enumerable; // Dotahujeme pouze jednu třídu extension-metod, ne celý namespace

class Program
{
    static void Main()
    {
        var range = Range(5, 17); // Ok: není extension metoda, ale běžná statická
        var odd = Where(range, i => i % 2 == 1); // Chyba, extension-metodu takto volat nelze
        var even = range.Where(i => i % 2 == 0); // Ok, extension metoda
    }
}

Using-konstrukce samozřejmě z extension metody neudělá běžnou statickou metodu, přímo zkrácenou syntaxí je tedy volat nelze.

Mimochodem dosud bylo možné bez obavy změnit běžnou statickou metodu na extension metodu a nemuseli jsme se obávat, že něco přestane fungovat. Nyní již si nemůžeme být jisti, protože pokud by někdo běžnou statickou metodu volal bez uvedení třídy (pomocí nového using static), tak změnou této metody na extension-metodu přestane takový kód být kompilovatelný.

Série článků o novinkách v C# 6.0:

  1. Auto-property initializers a getter-only (read-only) auto-properties
  2. Expression-bodied function members
  3. Using static
  4. Null-conditional operators (?., ?[], …)
  5. String inerpolation – zkrácený String.Format()
  6. nameof() expressions
  7. Index initializers – přehlednější inicializace slovníků
  8. Exception filters, await v catch/finally blocích
  9. Konstruktor struct bez parametrů
  10. Ostatní (extension-Add v initializers, overload resolution)

9 thoughts on “C# 6.0: Using static [3/10]

  1. Pingback: C# 6.0: Expression-bodied function members [2/10] | HAVIT Knowledge Base

  2. Pingback: C# 6.0: Null-conditional operators .? [4/10] | HAVIT Knowledge Base

  3. Pingback: C# 6.0: Auto-property initializers a getter-only (read-only) auto-properties [1/10] | HAVIT Knowledge Base

  4. Pingback: C# 6.0: String interpolation – zkrácený String.Format() [5/10] | HAVIT Knowledge Base

  5. Pingback: C# 6.0: nameof() expressions [6/10] | HAVIT Knowledge Base

  6. Pingback: C# 6.0: Index initializers – přehlednější inicializace slovníků [7/10] | HAVIT Knowledge Base

  7. Pingback: C# 6.0: Exception filters, await v catch/finally bloku | HAVIT Knowledge Base

  8. Pingback: C# 6.0: Konstruktor struct bez parametrů | HAVIT Knowledge Base

  9. Pingback: C# 6.0: Ostatní (extension-Add v initializers, overload resolution) [10/10] | HAVIT Knowledge Base

Napsat komentář

Vyplňte detaily níže nebo klikněte na ikonu pro přihlášení:

WordPress.com Logo

Komentujete pomocí vašeho WordPress.com účtu. Log Out / Změnit )

Twitter picture

Komentujete pomocí vašeho Twitter účtu. Log Out / Změnit )

Facebook photo

Komentujete pomocí vašeho Facebook účtu. Log Out / Změnit )

Google+ photo

Komentujete pomocí vašeho Google+ účtu. Log Out / Změnit )

Připojování k %s