람다 식으로 정의가 가능한 유형은 다음과 같다.일반 메서드속성의 get/set인덱서의 get/set생성자종료자이벤트의 add/remove✍ 샘플코드
튜플의 반환값을 분해하는 구문을 원한다면 Deconstruct 메서드를 1개 이상 정의하여 구현할 수 있다. 분해가 되는 개별값을 out 매개변수를 이용해 처리하면 된다.✍ 샘플코드✅ 결과
c여러 값을 인자로 또는 반환값으로 쓰고 싶을 때, 아래의 옵션을 고려할 수 있다.✍ 별도의 클래스원하는 값을 멤버변수로 담을 수 있는 별도의 클래스를 일일이 만드는 것은 귀찮다. ✍ dynamic 예약어정적 형식 검사를 할 수 없어 필드 이름이 바뀌어도 컴파일 시 문
c✍ 로컬 변수에 ref✍ 반환값에 ref✅ 결과✍ 컴파일 오류1 : 지역변수지역변수의 유효범위가 스택 상에 있을 때로 한정되기 때문에 메서드의 실행이 끝나 호출 측에 넘어가는 시점에 스택이 해제되어 return re로 반환받은 인스턴스가 남아있을 거라는 보장을 할 수
c✍ c\`\`\`csint result;int.TryParse("50", out result);Console.WriteLine(result);c✍ 중복 변수 선언 오류\_c\`\`\`csint.TryParse("50", out int result);Console.Wr
비주얼베이직과 Ftry { } catch (예외타입 e) when (조건식) { }✍ 샘플 코드조건식이 실행되는 시점은 처리 핸들러가 실행되는 시점이 아니기 때문에 아래와 같이 부가적인 작업을 할 수 있다.위의 코드가 아래의 코드와 동일하다고 생각할 수 있다.그러나 두
기존 방식위의 코드는 아래와 같이 컴파일 된다.새로운 방식위의 코드는 아래와 같이 컴파일 된다.기존 키 값을 덮어쓰기 때문에 다음과 같이 작성하여도 오류가 발생하지 않는다.
위의 코드에서 PrintInfo의 첫번째 인자인 name을 fullName으로 이름을 바꾸려고 하면, 식 안의 name도 컴파일 에러가 뜨면서 fullName으로 바꿀 것을 강제한다. 그러나 출력 결과에 쓰일 리터럴은 여전히 name으로 남아있다는 문제가 있다.
null 조건 연산자: 참조 변수의 값이 null이라면 그대로 null을 반환하고, null이 아니라면 지정된 멤버를 호출한다.✍ 참조변수의 멤버 접근 시 ?✍ 배열 인덱스 접근 시 ?✍ nullable 형식의 사용✍ ??✍ 효율성 고려
기존에는 '타입명.static메소드명' 으로 호출하지만,이제는 'using static 타입의전체이름'을 선언하면타입명 없이 바로 메소드를 호출할 수 있다.✍ 기존의 static 메서드 호출✍ using staticenum 타입의 멤버와 const 상수 멤버도 컴파일하
식(expression)0개 이상의 연산자(operator)에 의해 결합되어 단일 값으로 계산할 수 있는 경우에는 식이다.메서드 호출, 리터럴 자체도 식이다.(x>=100) && (x<300)Console.WriteLine("test");"I am good."문(
c> public string PropertyName {get; set;} = "Initial Value"l;✍ 샘플 코드
Task, Task<Result>는 비동기 처리를 위해 내부적인 존재가 되어있기 때문에, await에 따른 코드를 Task에 맡김으로써 비동기 기능을 간편하게 구현할 수 있다.Task 타입을 await 없이 쓰는 것도 가능하며, ThreadPool.QueueUse
C📝 동기 호출📝 비동기 호출📝 동기와 비동기의 쓰레드 차이✅ SyncPrint 호출 시 결과Read를 실행하기 전과 후의 쓰레드가 변하지 않는다.✅ AsyncPrint 호출 시 결과await 아래의 구문부터는 쓰레드 아이디가 변화하였다. await 이후의 코드는
호출자 정보 : 호출하는 측의 정보를 선택적 매개변수로 전달할 수 있다. 컴파일 시 호출자의 정보의 값으로 치환된다.CallerMemberName : 호출한 메서드 명CallerFilePath : 호출한 소스코드의 파일 경로CallerLineNumber : 호출한 소스
CLR을 바탕으로 한 DLR(Dynamic Language Runtime) 라이브러리를 통해, 루비나 파이썬 같은 동적 언어도 닷넷 프레임워크에 실행될 수 있다. 이런 동적 언어로 만들어진 프로그램의 타입을 정적 언어인 C#에 연동하기 위해 dynamic 예약어가 제공
선택적 매개변수(optional parameter)을 이용하여 매개변수 중 값이 전달되지 않은 인자가 있을 때 미리 지정된 기본값을 사용할 수 있다.💡 샘플 코드✅ 결과optional parameter는 ref, out 예약어와 함께 사용할 수 없다.optional
LINQ 쿼리의 반환 타입이 IEnumerable, IOrderedEnumerable인 경우 lazy evaluation 또는 deferred execution 방식으로 동작한다.💡 샘플 코드✅ 결과Where절은 foreach문에서 열거자를 통해 요소를 순환할 때 F
람다 식은 익명 메서드의 간편 표기 용도로 사용된다.1\. 람다 메서드와 익명 메서드💡 샘플 코드컴파일러는 Thread 타입의 생성자가 "void(object obj)" 형식의 델리게이트 인자를 받는다는 것을 알고 있으므로, 개발자가 람다식을 사용하여 delegate
기존 클래스를 상속하지 않고 기존 클래스의 내부 구조를 전혀 바꾸지 않고도, 새로운 메서드를 추가할 수 있게 하는 것이 확장 메서드이다.확장 메서드는 static 클래스 내의 static 메서드로 this 예약어 매개변수를 이용하여 구현한다.✍ 샘플 코드✅ 결과위의 코