주어진 다음의 클래스 :목록
List<Widget> widgets = _repository.GetItems(widgetType);
곳
: 나는이 작업을 수행 할 수없는 이유public class ContentItem : IEquatable<ContentItem>
{
...
}
및
public class Widget : ContentItem, IWidget
{
...
}
_repository.GetItems(widgetType)
은을 반환합니다.?
기본적으로 나는 ContentItem
클래스에서 작동하는 저장소 구현을 가지고 있으며 위젯에는 기본 속성이 있고 일부 정보 만 보유하고 있기 때문에 기본적으로 Widget
클래스와 함께 작업하기 위해 동일한 저장소를 사용하고 싶습니다. (이들은 IWidget
인터페이스에서 왔으며 저장소가 클래스를 처리하는 방법에 영향을주지 않습니다). 나는 단지 ContentItem
의 모든 발생을 Widget
으로 바꾸기 위해 다른 저장소 클래스를 만들고 싶지 않습니다.
명시 적으로 캐스트를 지정하거나 저장소 (또는 내가 가지고있는 저장소 인터페이스)를 변경하여 변경해야합니까? 가능한 경우 AsEnumerable(), ToList() 또는 명시 적 형변환과 같은 다양한 구문을 사용하지 않으려합니다.
동일한 저장소가있는 두 클래스를 모두 지원하도록 저장소 클래스에서 어떤 작업을 수행 할 수 있습니까? – mare
@mare :'Widget's를 가져 오려면 저장소 내에'Widget' 유형을 생성/반환해야합니다. 문제가 캐스팅 일 경우 리포지토리의 일반적인 메서드를 사용하여 올바른 형식의 인스턴스를 만들거나 반환 할 수 있습니다. 이 모든 것은 저장소에서 실제로 인스턴스를 생성하는 방법에 달려 있습니다. 정말 위젯입니까? – BrokenGlass
아니요, ContentItem입니다. 나는 이것들을 먼저 가지고 있었고, 그때 만 Widget 클래스가 소개되었습니다. – mare