C # 6 "정적 사용"기능은 어떻게 사용합니까?


123

C # 6 의 몇 가지 새로운 기능 , 특히 "using static"을 살펴보고 있습니다.

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

해당 블로그 게시물이 작성된 이후 구문이 약간 변경된 것으로 보입니다. 오류 메시지에서 알 수 있듯이 staticinclude 문에 다음을 추가 합니다.

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

5
@skwear : 새로운 질문에 대한 자료처럼 들립니다.
Cerbrus

1
@skwear의 질문에 대한 빠른 답변 : "정적 사용은 정적 멤버 를 가져올 수있는 새로운 종류의 using 절입니다 . <...>" . 클래스 PI정적 멤버 가 아닙니다 Math. 상수입니다. 간단히 말해서 멤버는 static.
Cerbrus 2017-04-05

3
다음과 같은 새로운 구문에 대한 기회처럼 using const System.Math;
들립니다

1
Microsoft 설명서의 예에서는 PI를 접두사없이 사용할 수 있다고 주장합니다. docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
Guney Ozsan 2018 년

1

staticA의 키워드using명령문 지정된 유형 (및 중첩 유형) 만 가져옵니다. 또한 더 이상 유형 이름을 제공하지 않아야합니다. 따라서 사용에 정적을 추가하십시오.

참고 :이 기능은 두 클래스가 논리적으로 밀접하게 관련된 경우에만 사용하십시오. 그렇지 않으면 코드를 읽기가 매우 어렵습니다.


"유형 이름을 제공해서는 안됩니다" 그게 무슨 뜻입니까? 내가 어디서 했어요?
Cerbrus

토비아스, 난 둘을 아무데도 합치 지 않을거야.
Cerbrus

@Cerbrus 오의 컨텍스트 실수로 변경 '당신이 그랬던 것처럼'이, 그 해결됩니다
토비아스 BROHL
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.