Upload
jeungmh
View
26
Download
0
Embed Size (px)
Citation preview
정보통신공학과 / 정명한
C# 세미나 , 12 회차 C# 6.0
- C# 6.0 은 기존의 문법을 이용한 코딩에서 문자열을줄이는 방향으로 개편되었다 .
- 낮은 프레임워크 버전에서도 이용가능하다 .
C# 6.0 업데이트
01
자동 구현 속성을 사용할 경우 생성자 없이 초깃값을 부여할 수 있다 .
Class Person{
public string Name { get; set; } = “Jane”;
// 생성자 생략private string [ 식별자 ] = “Jane”;public string Name{
get { return [ 식별자 ]; }set { [ 식별자 ] = value; }
}}
자동 구현 속성의 초기화 구문
Set 과 같은 설정자를 생략하여 읽기 전용 속성으로 만드는 것도 가능하다 .기존에 사용한 readonly 예약어 생략
02
람다식을 이용하여 메서드를 정의할 수 있다 .
public class Vector {
double x;double y;0.
Public Vector(double x, double y){this.x = x;this.y = y;}
public Vector Move(double dx, double dy) => new Vector(x + dx, y +dy);
public void PrintIt() => Console.WriteLine(this);
public override string ToString() => string.Format(“x = {0}, y = {1}”, x, y);
메서드 , 속성 및 인덱서 정의
02
속성 정의에 람다 식을 사용하는 것도 가능하다 !
당연하게도 set 은 불가능 , 외부 메서드를 수정한다는 것은 말이 안되죠 ?
메서드 , 속성 및 인덱서 정의
02
인덱서 구문에서의 람다식 정의도 가능
생성자의 경우는 메서드지만 람다 식을 이용할 수는 없다 .생성자를 대리자로 만든다는게…이상하죠 ?
메서드 , 속성 및 인덱서 정의
03
예시로 ~!!!
Console.WriteLine 를 간략 해보겠습니다 .
using System;using static System.Console;
class Program{
static void Main(string[] args){
WriteLine(“test”);}
}
using static 구문을 이용한 타입명 생략
Using Namespace 와 비슷한 기능 !
03
마찬가지로 enum 과 const 상수 멤버에 대해서도 타입명 생략가능Enum 이나 const 멤버는 컴파일하면 모두 static 유형으로 다뤄진다 .
왜냐면 상수니까 ?? 알아서 정적으로 만들어준다 .
using static 구문을 이용한 타입명 생략
03
확장 메서드의 경우는 using static 적용이 불가능 !
확장 메서드는 인스턴스 메서드 ( 객체 내부 메서드 ) 로 호출되는데 , 타입명을 명시하지 않으면클래스 매서드 ( 외부 객체 메서드 ) 인지인스턴스 메서드 인지 애매해진다 .
using static 구문을 이용한 타입명 생략
04
참조 변수 값이 null 이라면 그대로 null 을 반환하고 null 이 아닐경우 지정된 멤버를 호출한다 .
list != null ? new int?(list.Count) : null -> list?.Count대폭생략 !
null 조건 연산자Null 값 확인을 위한 조건문을 시행할 필요가 없다 .
04
반드시 null 값을 처리할 수 있는 타입을 사용해야한다 .
null 조건 연산자대신 ?? 연산자를 이용해 null 을 값 형식으로 반환할 수 있다 .
반환값이 없는 경우에도 사용가능
05
자주사용하는 string.Format 메서드를 축약string.Format(“ 이름 : {0}, 나이 :{1}”, Name, Age);아래 코드로 줄일 수 있다 .$” 이름 : {Name}, 나이 : {Age}”;
문자열 내에 포함된 식
06
식별자 이름을 그대로 출력하고자 할때 , 편리성을 주기위한 기능이다 .
nameof 연산자
이 코드에서는 출력문의 name 이 단지 문자열이기 때문에 오류가 발생하진 않는다
하지만 , nameof 를 사용하면 식별자로 사용할 수 있기 때문에 , 식별자 이름과 다른지알아낼 수 있다 .
07
Dictionary 의 장점을 더욱 살려 직관적인 초기화 구문을 지원한다 .
기존에 있던 키 값과 동일한 키 값을 가진 초기화 구문은 덮어쓰기 한다 .
Dictionary 타입의 인덱스 초기화
이전 버전 6.0 버전
08
이전의 C# 에서는 없었던 예외필터를 이용할 수 있게 되었다 .
readAll Text 에 지정한 파일이 없는 경우 FileNotFoundException 예외 핸들러가 선택되어야하는데 , 경로가 “ temp” 를 포함하는 경우에만 예외 처리를 한다 .
예외 필터이미 많이 알려져있는 When 구문 .
09
예외 처리 블록 내에서 비동기 호출을 처리할 수 있게 되었다 .
Catch/finally 블록 내애서 await사용
wait 를 catch/fianlly내에서 사용가능하다 .