2010-12-20 4 views
0

몇 가지 다른 개체로 구현 된 인터페이스가 있습니다. 내가 뭘 하려는지 C#에서 매개 변수로 인터페이스 개체를 받아 들일 것이고 그것을 구현하는 개체에이 매개 변수를 변환 할 수 있도록 몇 가지 다른 유형에 대해 동일한 기능을 쓸 필요가 없습니다 메서드를 작성합니다. 예 :인터페이스에서 인터페이스를 구현하는 객체로 변환 하시겠습니까?

클래스 UnappliedCashDetails 인터페이스 ITransactionDetail을 구현합니다. ISSBatch에 대한

생성자 :

public ISSBatch(List<ITransactionDetail> details)

public static ISSBatch GetNextReceiptBatch() { List<UnappliedCashDetail> details = new List<UnappliedCashDetail>();

/`*`some code here to populate my list`*`/    

    return = new ISSBatch(details); 

}

C#을이 마음에 들지 않습니다. 인터페이스를 잘못 사용하려고하거나 정확하게 캐스팅하지 않으려 고합니다.

감사합니다.

답변

2

을 허용하는 생성자에 List<UnappliedCashDetail>을 전달 중입니다. UnappliedCashDetailITransactionDetail을 잘 구현하지만이 유형의 분산은 C#에서 지원되지 않습니다. 생성자 (또는 다른 메서드) 내부에서 SomeOtherTransactionDetail의 인스턴스를 추가하려고 시도 할 수 있다는 것을 제외하고는 세부 목록에 이 실제로은 해당 선언에 따라 UnappliedCashDetail 만 받아 들여야한다는 것을 제외하고는 세부 목록에 인스턴스를 추가 할 수 있습니다.

이 당신의 코드가 작동하려면, 당신은 당신의 선언

List<ITransactionDetail> details = new List<ITransactionDetail>();  
/* some code here to populate my list */     
return new ISSBatch(details); 

을 변경해야 또는 당신은 단순히 어떤 경우에는 원래 List<UnappliedCashDetail> 선언 일 것이다 IEnumerable<ITransactionDetail>을 허용하도록 생성자를 변경할 수 있습니다. 차이는 IEnumerable<T> (참고 : C# 4)에서 지원됩니다. 이는 단지 시퀀스이므로 추가하거나 삭제할 수 없기 때문에 UnappliedCashDetail 개체의 시퀀스에 AppliedCashDetail 인스턴스를 추가 할 가능성이 없습니다.

관련 문제