C# 4.0
선택적 매개변수(Optional Parameter)와 명명된 인자(Named Argument)
선택적 매개변수(Optional Parameter)
메서드의 매개변수 가운데 전달되지 않는 인자가 있는 경우 미리 지정된 기본값을 사용하는 것을 의미한다.
class Person
{
public void Output(stringname, intage = 0, stringaddress = "Korea")
{
Console.Write(string.Format("{0}: {1} in {2}", name, age, address));
}
}
class Program
{
static void Main(string[] args)
{
Person p = newPerson();
p.Output("Anders");
p.Output("Winnie", 36);
p.Output("Tom", 28, "Tibet");
}
}
명명된 인자
인자의 이름으로 호출하는 측에서 값을 전달하는 기능이다.
Person p = new Person();
p.Output(address: "Tibet", name: "Tom");
p.Output(age: 5, name: "Tom", address: "Tibet");
p.Output(name: "Tom");
: dynamic 예약어
dynamic
은 프로그램 실행 시에 결정되는 동적 타입이다.
동적 타입은 실행 중에 다른 타입의 객체와도 연결이 가능한 타입을 말한다.
class Program
{
static void Main(string[] args)
{
dynamic d = 5;
Console.WriteLine(d.ToString());
d = "abcde";
Console.WriteLine(d.ToString());
}
}
덕타이핑 (duck typeing)
'오리의 한 종류인지 검사하지 않고 오리처럼 꽥꽥하는지, 오리처럼 걷는지 등등 오리가 하는 행동들을 할 수 있는지 검사한다'는 의미
일반적으로 객체지향 언어에서는 강력한 형식(Strong type)이 적용돼 있어 무조건 타입을 가지고 판단한다.
함수에 매개변수로 넘기는 상황에서 파라미터에 명시된 타입이 일치하던가, 그 타입을 상속한 타입이어야만 가능하다.
하지만 덕 타이핑은 객체의 타입으로 판단하지 않고, 객체가 무엇을 할 수 있는지를 보고 판단한다.
int DuckTypingCall(dynamic target, dynamic item)
{
return target.IndexOf(item);
}
string txt = "test func"
List<int> list = new List<int> { 1, 2, 3, 4, 5 };
Console.WriteLine(DuckTypingCall(txt, "test")); // 0
Console.WriteLine(DuckTypingCall(list, 3)); // 2
동적 타입은 컴파일 타임에 메타데이터를 가지지 않기 때문에 컴파일러는 특정 호출이 적절한지 아닌지를 판단할 수가 없다.
따라서 위 예제는 문제없이 컴파일되고 실행중에 문제가 생기면 런타임에러를 발생시킨다.
C# 5.0
호출자 정보
C++의 3가지 매크로상수에 대응__FUNCTION__
, __FILE__
, __LINE__
,
usingSystem;
usingSystem.Runtime.CompilerServices;
class Program
{
static void Main(string[] args)
{
LogMessage("테스트로그");
}
static void LogMessage(string text,
[CallerMemberName] string member = "",
[CallerFilePath] string file = "",
[CallerLineNumber] int line = 0)
{
Console.WriteLine("텍스트: "+ text);
Console.WriteLine("호출한 메서드이름: "+ member);
Console.WriteLine("호출한 소스코드의 파일명: "+ file);
Console.WriteLine("호출한 소스코드의 라인번호: "+ line);
}
}
비동기 호출
C# 6.0
............