web-dev-qa-db-ja.com

C#6の「静的を使用する」機能を使用するにはどうすればよいですか?

いくつかの 新機能 C#6、具体的には "using static"を見ています。

using staticは、タイプの静的メンバーをスコープに直接インポートできる新しい種類のusing句です。
(ブログ投稿の下部)

私が見つけたいくつかのチュートリアルによると、アイデアは次のとおりです。
の代わりに:

using System;

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

静的クラスを使用する新しいC#6機能を使用して、繰り返されるConsoleステートメントを省略できます。

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

しかし、これは私には機能していないようです。 usingステートメントでエラーが発生しています。

「「using namespace」ディレクティブは名前空間にのみ適用できます。「Console」は名前空間ではない型です。代わりに「using static」ディレクティブを検討してください」

Visual Studio 2015を使用していますが、ビルド言語のバージョンを "C#6.0"に設定しています

何が得られますか? msdnブログの例は間違っていますか?なぜこれが機能しないのですか?


ブログの投稿は最新の更新を反映するように更新されましたが、ブログがダウンした場合のスクリーンショットは次のとおりです。

blog

109
Cerbrus

これらのブログ投稿が書かれてから、構文がわずかに変更されたようです。エラーメッセージが示すように、staticをincludeステートメントに追加します。

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

その後、コードがコンパイルされます。


C#6.0では、これはstaticとして宣言されたメンバーに対してのみ機能することに注意してください。

たとえば、System.Mathを検討してください。

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

using static System.Mathの場合は、Abs();を使用できます。
ただし、静的変数Math.PI;ではないため、PIのプレフィックスを付ける必要があります。

C#7.2(およびそれよりも低いかもしれません)では、そうではありません。constのようなPI値も使用できます。

157
Cerbrus

staticステートメントのusingキーワードは、指定されたタイプ(およびネストされたタイプ)のみをインポートします。さらに、タイプ名を指定しないでください。したがって、使用する静的なものを追加するだけです。

注:この機能は、2つのクラスが論理的に密接に関連している場合にのみ使用してください。そうしないと、コードの読み取りがかなり難しくなります。

0
Tobias Brohl