그릇된 인간의 그릇된 공간

List All

명시적 인터페이스 구현에 대한 글을 읽고 떠올라서 한 번 해봤는데 되더라.

C#에서 배열을 쓸 때 List에선 제공되는 기능들이 없어서 갑갑할 때가 있다.

Add, Remove 같은 거야 배열 특성상 당연히 안 되는 거지만 될 것 같은 애들도 없으니 문제.

근데 사실 배열은 IList 인터페이스를 구현하고 있어서 캐스팅하면 쓸 수 있다?

이때까진 인터페이스 구현하면 무조건 퍼블릭으로 노출해야 하는 줄 알았는데

명시적 구현을 해서 프라이빗으로 구현한 다음시 그 인터페이스를 통해서만 사용할 수 있도록 하는 방법이 있더라.

즉, 배열은 사실 IList를 구현하고 있음에도 불구하고 명시적 구현이라

겉으론 안 하고 있는 척 하고 있는 것이다.

이런 츤데레 배열 같으닐.

그래서 이런 짓이 가능하다.

int[] array = new int[10];

IList arrayList = array;

array[0] = 5;

array[1] = 5;

array[2] = 6;

array[3] = 6;

Console.WriteLine( arrayList.Contains( 5 ) );

Console.WriteLine( arrayList.IndexOf( 6 ) );

arrayList.Clear();

Console.WriteLine( array[0] );

멤버 메소드 다 테스트 해봤는데 저 메소드 3개만 가능하다.

다른 IList의 메소드들을 호출하면 익셉션 뻥~!

배열에 대고 포함 여부 알아보기, 인덱스 찾기, 초기화 한다고 포문 돌리는 일이

자주 있는데 그런 코드가 많아지면 저렇게 IList 인터페이스로 빼서 메소드를 써주면

좀 더 깔끔한 경우가 있을 듯.

  1. Dish 2008.06.29 18:55 Modify Delete Reply # 근데 웬만하면 그냥 List<Type>을 쓰자 ㅋ
  2. 샴푸 2008.06.29 19:46 Modify Delete Reply # C<type>list 쵝오...
  3. Dish 2008.07.12 18:38 Modify Delete Reply # DirectX의 DirectInput에 있는 Key 타입을 저렇게 쓰는 경우 런타임에서 터져버리는 오류가 발견되었음 ;
Previous :1: ... : 83:84:85:86:87:88:89:90:91: ... : 131: Next
Recent Comments
Recent Trackbacks
Tag Cloud