C # 6 "Statik kullanma" özelliğini nasıl kullanırım?


123

C # 6'daki birkaç yeni özelliğe , özellikle "statik kullanarak" bir göz atıyorum .

Statik kullanmak, türlerin statik üyelerini doğrudan kapsama aktarmanıza izin veren yeni bir kullanım cümlesi türüdür.
(Blog gönderisinin altı)

Bulduğum birkaç öğreticiye göre fikir şu şekildedir
: Yerine:

using System;

class Program 
{ 
    static void Main() 
    { 
        Console.WriteLine("Hello world!"); 
        Console.WriteLine("Another message"); 
    } 
}

ConsoleStatik sınıfları kullanmanın yeni C # 6 özelliğini kullanarak yinelenen ifadeyi atlayabilirsiniz :

using System.Console;
//           ^ `.Console` added.
class Program 
{ 
    static void Main() 
    { 
        WriteLine("Hello world!"); 
        WriteLine("Another message"); 
    } // ^ `Console.` removed.
}

Ancak, bu benim için işe yaramıyor gibi görünüyor. usingAçıklamada şöyle bir hata alıyorum:

"A ' using namespace' yönergesi yalnızca ad alanlarına uygulanabilir; ' Console' bir türdür, ad alanı değil. using staticBunun yerine bir ' ' yönergesi düşünün "

Visual Studio 2015 kullanıyorum ve derleme dili sürümüm "C # 6.0" olarak ayarlanmış

Ne oluyor? Msdn blogunun örneği yanlış mı? Bu neden çalışmıyor?


Blog gönderisi artık en son güncellemeleri yansıtacak şekilde güncellendi, ancak blogun çökmesi ihtimaline karşı işte bir ekran görüntüsü:

Blog

Yanıtlar:


177

Görünüşe göre bu blog yazıları yazıldığından beri sözdizimi biraz değişmiş. Hata mesajının da önerdiği gibi, staticinclude ifadenize ekleyin :

using static System.Console;
//      ^
class Program 
{ 
    static void Main() 
    { 
        WriteLine("Hello world!"); 
        WriteLine("Another message"); 
    } 
}

Ardından kodunuz derlenecektir.


C # 6.0'da bunun yalnızca static.

Örneğin System.Mathşunları göz önünde bulundurun :

public static class Math {
    public const double PI = 3.1415926535897931;
    public static double Abs(double value);
    // <more stuff>
}

Ne zaman using static System.Mathkullanabilirsin Abs();.
Ancak, yine de önek olurdu PIstatik bir üyesi değildir, çünkü: Math.PI;.

C # 7.2 sürümünden başlayarak, durum böyle olmamalı, constgibi değerler PIde kullanılabilir.


3
Ben de benzer bir sorun yaşıyorum ama bunun yerine System.Mathözellikle Math.PI. using static System.MathYöntemleri kullandığımda Sqrt()çalışmak gibi ama sabit değil PI. Yazmaya devam etmeliyim Math.PIyoksa kod derlenmiyor. Bunun neden işe yaramadığını merak ediyorum. Bunun için yeni bir soru göndermeli miyim?
skwear

5
@skwear: yeni bir soru için materyal gibi geliyor, evet.
Cerbrus

1
@ Skwear'ın sorusuna hızlı bir yanıt olarak: "statik kullanmak, <...> statik üyeleri içe aktarmanıza izin veren yeni bir kullanım cümlesi türüdür " . sınıfın statik bir üyesi PIdeğil . Sabittir. Basitçe söylemek gerekirse: üye ilan edilmelidir . Mathstatic
Cerbrus

3
Yeni bir sözdizimi için bir fırsat gibi görünüyor: using const System.Math;:)
Filip Skakun

1
Microsoft belgelerindeki örnek, PI'nın önek olmadan kullanılabileceğini iddia ediyor: docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
Guney Ozsan

1

İfadedeki staticAnahtar Sözcük, usingyalnızca belirtilen türü (ve iç içe geçmiş türleri) içe aktarır. Ayrıca artık tip adını vermemelisiniz. Bu yüzden kullanımınıza statik ekleyin.

Not: Lütfen bu özelliği yalnızca iki sınıf mantıksal olarak yakından ilişkili olduğunda kullanın, aksi takdirde kodu okumayı oldukça zorlaştırır.


"tip adını vermemelisin" Bununla ne demek istiyorsun? Bunu nerede yaptım
Cerbrus

Thobias, ikisini hiçbir yerde birleştirmiyorum.
Cerbrus

@Cerbrus Oh, 'yaptığın gibi' bağlamı yanlışlıkla değişti, düzeltecek
Tobias Brohl
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.