2012-10-01 2 views
0

인터페이스를 구현하는 클래스의 인스턴스가 전달 된 경우 정확한 유형을 반드시 알 필요는 없습니다. 나는이 클래스 (그것이 무엇이든간에)의 배열을 만들려면, I는 다음과 같이 수행 할 수 있습니다 :유형을 모른 채 배열의 항목을 초기화하는 방법은 무엇입니까?

IWhatever[] ArrayOfClass = (IWhatever[])Array.CreateInstance(InstanceOfClass.GetType(), length); 

을만큼 InstanceOfClass이 IWhatever를 구현하는 클래스의 인스턴스이며,이 작동합니다.

문제는 배열의 멤버를 초기화하는 방법을 알 수없는 것입니다. 나는 new IWhatever()이 효과가있을 것이라고 생각했지만 그렇지 않습니다.

어떻게 배열 구성원을 구성합니까?

+3

어레이 분산이 좋지 않습니다. 사용하지 마십시오! –

+0

왜 배열 자체를 만들기 위해'new IWhatever [length]'를 사용하지 않으시겠습니까? 그것은'InstanceOfClass'와 같은 타입의 객체를 가질 수 있습니다. –

+0

벤 보이트 (Ben Voigt)는 arrray를 만드는 방법에 대해서는 정확하지만 항목을 추가하려면 인터페이스를 구현하는 클래스를 사용해야합니다. 많은 사람들은 Factory 메서드를 사용하여 이러한 작업을 수행하지만 그런 지루한 작업을 발견하고 필요할 때마다 일반 생성자를 사용합니다 (많은 계산이 생성자를 호출해야하는 경우가 아니라면 자존심을 얕게하고 공장) –

답변

2

각 구성원을 인터페이스를 구현하는 일부 클래스의 인스턴스로 초기화해야합니다.

당신은 InstanceOfClass과 같은 유형을 원하는 경우, 그 유형은 기본 생성자가있는 경우, 당신은 같은 것을 사용할 수 있습니다 인터페이스에 팩토리 메소드를 추가

for(int i=0;i<ArrayOfClass.Length;++i) 
{ 
    ArrayOfClass[i] = (IWhatever)Activator.CreateInstance(InstanceOfClass.GetType()); 
} 
0

합니다. 팩토리 메서드는 적절한 유형의 인스턴스 을 생성합니다.이 유형은 제네릭 형식을 기반으로 배열로 지정합니다.

관련 문제