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


123

C#6の新機能のいくつか、具体的には 「静的を使用する」を調べています

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

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

using System;

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

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

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ブログの例は正しくありませんか?なぜこれが機能しないのですか?


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

ブログ

回答:


177

それらのブログ投稿が書かれて以来、構文がわずかに変更されているようです。エラーメッセージが示すよう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();
ただし、PI静的メンバーではないため、プレフィックスを付ける必要がありますMath.PI;

C#バージョン7.2以降では、これは当てはまりません。constなどの値PIも使用できます。


3
私は同様の問題を抱えていますが、代わりにSystem.Math、具体的にはMath.PI。私が使用する場合using static System.Math、のようなメソッドはSqrt()機能しますが、のような定数は使用しませんPI。書き続けるMath.PI必要があるか、コードがコンパイルされません。なぜこれが機能しないのか知りたいです。これについて新しい質問を提出する必要がありますか?
skwear 2016

5
@skwear:新しい質問の題材のようですね。
セルブルス2016

1
@skwearの質問に対する簡単な回答として、「staticの使用は、静的メンバーをインポートできる新しい種類のusing句<...>」です。クラスの静的メンバーでPIはありません。それは定数です。簡単に言うと、メンバーはとして宣言する必要があります。Mathstatic
Cerbrus

3
次のような新しい構文の機会のようにusing const System.Math;
聞こえ

1
マイクロソフトのドキュメントを主張PIの例では、接頭辞なしで使用することができます。docs.microsoft.com/en-us/dotnet/csharp/language-reference/...
Guney Ozsan

1

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

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


「型名をつけてはいけない」それはどういう意味ですか?どこでやったの?
Cerbrus

トビアス、私はどこにも2つを組み合わせていません。
Cerbrus

@Cerbrusああ、「あなたがしたように」のコンテキストが誤って変更された場合、それは修正されます
Tobias Brohl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.