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:
- Auto-property initializers a getter-only (read-only) auto-properties
- Expression-bodied function members
- Using static
- Null-conditional operators (?., ?[], …)
- String inerpolation – zkrácený String.Format()
- nameof() expressions
- Index initializers – přehlednější inicializace slovníků
- Exception filters, await v catch/finally blocích
- Konstruktor struct bez parametrů
- Ostatní (extension-Add v initializers, overload resolution)
Pingback: C# 6.0: Expression-bodied function members [2/10] | HAVIT Knowledge Base
Pingback: C# 6.0: Null-conditional operators .? [4/10] | HAVIT Knowledge Base
Pingback: C# 6.0: Auto-property initializers a getter-only (read-only) auto-properties [1/10] | HAVIT Knowledge Base
Pingback: C# 6.0: String interpolation – zkrácený String.Format() [5/10] | HAVIT Knowledge Base
Pingback: C# 6.0: nameof() expressions [6/10] | HAVIT Knowledge Base
Pingback: C# 6.0: Index initializers – přehlednější inicializace slovníků [7/10] | HAVIT Knowledge Base
Pingback: C# 6.0: Exception filters, await v catch/finally bloku | HAVIT Knowledge Base
Pingback: C# 6.0: Konstruktor struct bez parametrů | HAVIT Knowledge Base
Pingback: C# 6.0: Ostatní (extension-Add v initializers, overload resolution) [10/10] | HAVIT Knowledge Base