잊지 않겠습니다.

4. Variance

.NET Framework 2009. 1. 7. 12:57

IEnumerable interface의 변경 

  1. public interface IEnumerable<out T> : IEnumerable  
  2. {  
  3.     IEnumerator<T> GetEnumerator();  
  4. }  
  5.   
  6. public interface IEnumerator<out T> : IEnumerator  
  7. {  
  8.     bool MoveNext();  
  9.     T Current { get; }  
  10. }  

 : out의 추가. 모든 결과의 output만이 가능한 상태로 interface의 변경

 

IComparer interface의 변경

  1. public interface IComparer<in T>  
  2. {  
  3.     public int Compare(T left, T right);  
  4. }  

각 Interface에서의 in, out의 명시적 사용이 된 형태로 interface 변경

Posted by Y2K
,

Dynamic import

: Dynamic lookup과 같이 사용되어서 COM에 대한 명시적 선언이 없이 COM 객체에 대한 접근 및 사용이 가능하다.

IDispatch의 이용과 거의 동일하게 사용 가능하다.

  1. //old code  
  2. ((Excel.Range)excel.Cells[1,1]).value2 = "Hello";  
  3.   
  4. //New Code  
  5. excel.Cells[1,1].Value = "Hello";  

 

Omitting ref

: COM에서는 input parameter가 output으로 이용되는 경우가 아주 많다. 대부분이 LRESULT를 반환하고, 나머지 결과들을 대부분 Input Parameter에서 reference 형태로 관리가 되는 경우가 대부분이다. 기존의 C#에서 COM object를 사용할 때에는 ref를 지원하였으나, 이제는 자동으로 형태를 구현 할 수 있게 변경된다.

: COM 객체에 대한 지원은 .NET Framework가 올라가면 올라갈수록 계속해서 변경되는 사항인 것 같다.;;
Posted by Y2K
,

Optional parameters

  1. public void Method1(int x, int y = 3, int z = 7);   
  2.   
  3. Method1(10, 11, 12); //ordinary call of Method1  
  4. Method1(10, 11); // x = 10, y = 11, z = 7  
  5. Method1(10); // x = 10, y = 3, z = 7  

: 가장 바라던 기능. 수많은 overload 함수들을 제거할 수 있게 된다. 다른 .NET Framework API들에서도 많은 변화가 있을 것 같다는 생각이 든다.

 

Named and optional arguments

  1. public void Method1(int x, int y = 3, int z = 7);   
  2.   
  3. Method1(10, 11, 12); //ordinary call of Method1  
  4. Method1(x : 1, z : 10); // x = 1, y = 3, z = 10  
  5. Method1(z : 10, x : 1); // x = 1, y = 3, z = 10 : reversing the order of arguments  
: 놀라운 변화중 하나. Ruby나 Python에서 제공되는 Named Arguments를 사용가능하다.
Posted by Y2K
,