-
Visual Studio 2017 RCdev/etc 2016. 12. 5. 00:11
visual studio 2017 RC가 공개 되었다.
설치화면
오랫동안 변함없던 답답한 설치 화면이 metro ui로 시원하게 바뀌었다.
IDE
시작화면 변경
시작화면도 간지나게 변경 되었다.
실행속도 향상
실행속도가 50% 빨라졌다고 하는데 잘 모르겠다.
RC버전이니 정식버전을 믿어보자.
새 기능
IntelliSense 필터링
IntelliSene 목록 중 class, field , method 등으로 필터링 할 수 있게 되었다. 그닥 쓸모는 없어 보이지만 간지난다.
그리고 추가 플러그인 없이 코드 에디터에 블록이 라인도 표시해준다.
리펙토링 기능 강화
이전 버전에 비해 리펙토링 기능이 강화 되었다.
- 변수 inline 이동
- 이니셜라이저로 개체초기화 단순화
- null 병합 연산자로 null 검사와 throw식 간소화
하지만 리펙토링은 intellij 따라오려면 아직 멀었다.
C# 7.0
위에 있는거 다 필요 없고 Visual Studio 2017과 함께라면 C# 7.0을 쓸 수 있다.
Out variables
out 출력 변수를 기존에는 아래와 같이 선언해야 했다.
public void PrintCoordinates(Point p) { int x, y; // have to "predeclare" p.GetCoordinates(out x, out y); WriteLine($"({x}, {y})"); }
하지만 이제 for문에 int i=0하는것처럼 선언과 동시에 사용할 수 있게 되었다.
public void PrintCoordinates(Point p) { p.GetCoordinates(out int x, out int y); WriteLine($"({x}, {y})"); }
Pattern matching
Is-expressions with patterns
기존의 is 연산자 우측에는 항상 데이터형이 나오지만 이제는 변수로도 가능하다. 좀더 유연해졌다.
public void PrintStars(object o) { if (o is null) return; // constant pattern "null" if (!(o is int i)) return; // type pattern "int i" WriteLine(new string('*', i)); }
Switch statements with patterns
switch에서 모든 자료형의 비교가 가능해졌으며 패턴을 사용할 수도 있다.
switch(shape) { case Circle c: WriteLine($"circle with radius {c.Radius}"); break; case Rectangle s when (s.Length == s.Height): WriteLine($"{s.Length} x {s.Height} square"); break; case Rectangle r: WriteLine($"{r.Length} x {r.Height} rectangle"); break; default: WriteLine("<unknown shape>"); break; case null: throw new ArgumentNullException(nameof(shape)); }
Tuples
아~ 이건 진짜 레알 큰일이다.
이제 Tuple을 남발해도 될 때가 왔다.
아래처럼 리턴형에 name을 지정해주고
(string first, string middle, string last) LookupName(long id) // tuple return type { ... // retrieve first, middle and last from data storage return (first, middle, last); // tuple literal }
이렇게 쓰면 된다.
var names = LookupName(id); WriteLine($"found {names.first} {names.last}.");
지리지? 이제 여러개의 리턴 타입을 받기 위해 새로운 클래스나 구조체를 만들지 않아도 된다.
Local functions
function 내에 function을 정의할 수 있게 되었다.
이전에는 Func와 Lamda를 이용해서 local function을 구현했었다.
그러나 c# 7.0에서는 훨씬 직관적으로 변했으며 Func와 Lamda 조합과는 다르게 호출하는 곳보다 아래에 있어도 된다.
이렇게 했던것이
private int sum(int a,int b)
{
Func<int,int,int> LocalFunction=(c,d)=>
{
return c+d;
}
return LocalFunction(a,b);
}
이렇게 할 수 있다. 일단 호출부 아래에 있어도 된다는게 좋다.
public int sum(int a, int b) { return LocalFunction(a,b);
int LocalFunction(int c, int d)
{
return c+d;
} }
급 귀찮아 진다. 좀 더 있는데 자세한 사항은 여기서 보자.
https://www.visualstudio.com/en-us/news/releasenotes/vs2017-relnotes
https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/
댓글