2012-11-29 2 views
2

나는 우리의 프로젝트사전 선언에서 인터페이스를 사용하는 이유는 무엇입니까?

Dictionary<int, IList> someDict = new Dictionary<int, IList>(); 

값 인터페이스를 사용하는 idead은 무엇에이 코드를 발견? 그것은 IList를 구현/지원하는 모든 목록에 넣을 수 있다는 의미입니까? 예를 들어 L List<int>List<string>을 사전에 값으로 입력 할 수 있습니까?

+0

IList의 구현을 넣을 수 있습니다. –

+0

"IList에서 상속 한 모든 목록"을 "IList에서 구현/지원하는 모든 목록"으로 변경하십시오. – Arjang

답변

4

더 일반적인 유형을 사용할 수 있으므로 나중에 유형을 변경하면 리팩터링하기가 더 쉬워집니다.

List<T> or IList<T>

리팩토링 작업을 줄일 수있는 가장 좋은 방법은 가능한 경우는 IEnumerable을 사용하는 것입니다.

+1

그러나 요소를 추가하거나 삭제해야 할 경우 'IEnumrable'은 적합하지 않으므로 지원하지 않습니다. 그 경우에는 'IList'가 바람직합니다. 아이디어를 얻었습니다. 감사합니다! –

1

예, 특수 클래스와의 연결을 해제하려면 사전에 사용 된 유형이 IList 기능을 제공하는지 확인하기 만하면됩니다. 유형이 제공하는 한 List<T>을 포함하여 사용할 수 있습니다. 유형의 메소드/특성 집합을 보장하는 계약과 같습니다.

1

예, 선언 된 유형에서 상속 한 유형을 사용할 수 있습니다. 귀하의 경우 List<int>List<T>에서 생성 된 제네릭 유형이며 IList에서 상속됩니다. 따라서 사전에 List<int>을 사용할 수 있습니다.

2

당신은 당신은 어떤 키의 값으로 IList` '의 구현을 넣을 수있는 값으로

Dictionary<int, IList> someDict = new Dictionary<int, IList>(); 
someDict[1] = new List<string>() { "Hello", "World" }; 
someDict[2] = new List<int>() { 42 }; 
someDict[3] = new int[] { 1, 2, 3 }; 
someDict[4] = new ArrayList(); 
관련 문제