참조 : http://modeeb.wordpress.com/2009/04/08/c-40-whats-next/

Improved COM Interoperability

C#에서 COM interop 함수들과 작업을 했을때, 여러분은 다음과 같이 불필요한 파라미터에 참조값으로 Missing.Value를 넘겨줬어야 했다.

object filename = "test.docx";
object missing = System.Reflection.Missing.Value;

doc.SaveAs(ref filename,
           ref missing, ref missing, ref missing,
           ref missing, ref missing, ref missing,
           ref missing, ref missing, ref missing,
           ref missing, ref missing, ref missing,
           ref missing, ref missing, ref missing);

인제 C# 4.0에서는 다음과 같이 코딩하면 된다.

doc.SaveAs(filename);

위 코드를 보면 여러분은 ref 생략이 가능하지만, 아직 COM interoperability를 사용하지 않을 경우 ref를 생략하면 안된다. 또, 여러분의 .NET 응용프로그램과 Primary Interop Assembly (PIA)를 포함되어야 했다. C# 4.0에서는 이 작업이 필요없다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2009/12/01 13:01 2009/12/01 13:01
Posted by 나는산.
TAGS

Leave your greetings here.

[로그인][오픈아이디란?]
참조 : http://modeeb.wordpress.com/2009/04/08/c-40-whats-next/

Optional and Named Parameters

C# 4.0의 또 다른 장점은 C나 C++처럼 Optional Paramenter와 Named Parameter를 지원한다는 것이다.

이전 C#에서는 이런 기능들이 지원이 되지 않아 함수 이름이 똑같지만 파라미터가 다른 여러개의 함수들을 볼 수 있었을 것이다. C# 4.0에서는 다음과 같이 함수는 선택적 파라미터를 사용하여 리펙토링 될 수 있다.

public StreamReader OpenTextFile(
         string path,
         Encoding encoding = null,
         bool detectEncoding = false,
         int bufferSize = 1024) { }

위와 같이 OpenTextFile 함수는 선택적 파라미터 하나 이상의 파라미터를 생략해서 사용할 수 있다.

OpenTextFile("foo.txt", Encoding.UTF8);

또한 C# 4.0는 Named Parameter를 지원해서 OpenTextFile 함수는 선택적 파라미터를 생략하면서 특정 파마리터를 정의해서 사용할 수 있다.

OpenTextFile("foo.txt", Encoding.UTF8, bufferSize: 1024);

Named Parameter는 함수 파라미터 순서에서 항상 마지막에서 사용되어야 하지만 Named Parameter 끼리는 순서가 상관 없다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2009/12/01 12:46 2009/12/01 12:46
Posted by 나는산.
TAGS

Leave your greetings here.

[로그인][오픈아이디란?]
참조 : http://modeeb.wordpress.com/2009/04/08/c-40-whats-next/

Dynamically Typed Objects

오늘날 C#에서 여러분은 아래 코드와 같이 특정 클래스의 인스턴스를 가져와서 그 인스턴스의 Add이라는 함수를 호출해서 두 정수의 합을 가져와야 하는 필요하가 있을 수도 있다.

Calculator calc = GetCalculator();
int sum = calc.Add(10, 20);

위의 코드는 만약은 Calculator 클래스가 정적 타입이 아니라 COM, Ruby, Python 아니면 심지어 JavaScript으로 쓰져 있다면 더 재미있어 진다. 우리가 Calculator 클래스가 .NET 객체라고 알고 있지만 정확하게 어떤 타입인지 몰라도 우리는 Reflection을 이용하여 런타임일 때의 속성 타입을 알수 있고 Add 함수를 동적으로 호출할 수 있다.

object calc = GetCalculator();
Type type = calc.GetType();
object result = type.InvokeMember(
         "Add",
         BindingFlags.InvokeMethod,
         null,
         new object[] { 10, 20 });
int sum = Convert.ToInt32(result);

C# 4.0에서는 다음 처럼 간단하게 코딩할 수 있다.

dynamic calc = GetCalculator();
int sum = calc.Add(10, 20);

위 코드 예제에서 우리는 dynamic이라는 정적 타입을 가지는 calc라는 변수를 선언했다. 다음에 Add 함수를 동적으호 호출하여, 호출되는 결과가 동적으로 정적 타입 정수로 변환한다.

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2009/12/01 12:33 2009/12/01 12:33
Posted by 나는산.
TAGS

Leave your greetings here.

[로그인][오픈아이디란?]
« Previous : 1 : 2 : 3 : 4 : 5 : 6 : 7 : ... 184 : Next »