1. 동적ExpandoObject
js에 익숙한 친구들은 js가 다음과 같이 작성될 수 있다는 것을 알고 있습니다.
소스 인쇄 보기?1 var t = new Object();
2 t.Abc = '뭔가';
3t.값 = 243;
이제 변수가 ExpandoObject 유형으로 선언된 경우 C#에서 js 동적 언어의 이 기능을 사용할 수도 있습니다. 예를 들어:
sourceprint 보기?1 static void Main(string[] args)
2 {
3 동적 t = 새로운 ExpandoObject();
4 t.Abc = "abc";
5t.값 = 10000;
6 Console.WriteLine("t의 abc = {0},t의 값 = {1}", t.Abc, t.Value);
7 Console.ReadLine();
8}
이 응용 프로그램을 지원하기 위해 새로운 네임스페이스 System.Dynamic이 C# 4.0에 추가되었습니다. 이는 C#을 동적 언어로 전환하는 시도이기도 합니다.
2. 일반 자동 변환
C# 4.0 이전에는 다음 코드를 컴파일할 수 없었습니다.
view sourceprint?1 IEnumerable
2 "나는 0이다", "나는 1이다", "나는 2이다"
3};
그러나 C# 4.0에서는 이러한 종류의 선언이 허용되지만 제네릭 형식에 대한 유사한 메서드는 허용되지 않습니다. 다음 코드에는 컴파일 오류가 있습니다.
view sourceprint?1 List
2 "나는 0이다", "나는 1이다", "나는 2이다"
3};
3. 메소드 매개변수의 선택적 매개변수는 다음과 같습니다. 메소드 선언 구문
view sourceprint?1 static void DoSomething(int notOptionalArg,string arg1 = "default Arg1", string arg2 = "default arg2") {
2 Console.WriteLine("arg1 = {0},arg2 = {1}",arg1,arg2);
3}
이 메소드에는 세 개의 매개변수가 있습니다. 첫 번째는 필수 매개변수이고 두 번째와 세 번째 매개변수는 선택적 매개변수이며 모두 기본값을 갖습니다. 이 형식은 고정 매개변수가 있는 여러 메서드 오버로드에 유용합니다.
다음과 같이 호출됩니다.
sourceprint 보기?1 static void Main(string[] args)
2 {
3 DoSomething(1);
4 DoSomething(1, "조롱박");
5 DoSomething(1, "조롱박", "오이");
6 Console.ReadLine();
7}
아마도 매개변수를 선택하지 않고 선택적 매개변수 메소드와 동일한 메소드 시그니처를 가진 메소드가 있다면 C#에서는 이를 어떻게 처리할 것인가? 다음 코드를 살펴보겠습니다.
view sourceprint?1 static void DoSomething(int notOpArg, string arg)
2 {
3 Console.WriteLine("arg1 = {0}", arg);
4}
다른 DoSomething 메서드를 오버로드했습니다. 이 메서드에는 두 개의 매개 변수가 있지만 실험에서는 호출이 입증되지 않았습니다.
DoSomething(1,"arg")인 경우 선택적 매개 변수가 없는 메서드가 먼저 실행됩니다.
4. 메소드 매개변수의 명명된 매개변수를 사용하면 메소드 호출 시 매개변수 이름을 지정하여 매개변수 값을 지정할 수 있습니다. 이 경우 매개변수의 순서는 무시할 수 있습니다. 다음 메소드 선언:
view sourceprint?1 static void DoSomething(int height, int width, string openerName, string scroll) {
2 Console.WriteLine("높이 = {0}, 너비 = {1},openerName = {2}, 스크롤 = {3}",height,width,openerName,scroll);
3}
위에서 선언한 메소드를 다음과 같이 호출할 수 있습니다.
sourceprint 보기?1 static void Main(string[] args)
2 {
3 DoSomething( 스크롤 : "no", 높이 : 10, 너비 : 5, openerName : "창 이름");
4 Console.ReadLine();
5}
분명히 이것은 구문상의 설탕이지만 메소드 매개변수가 많을 때 의미가 있고 코드의 가독성을 높일 수 있습니다.
http://www.cnblogs.com/yukaizhao/archive/2010/05/24/csharp-40-dynamic-ional-argument.html