나는 비슷한 문제가 this post에 있습니다.동일한 컬렉션에 다른 유형의 제네릭 클래스 (모두 제네릭 기본 클래스 포함)를 저장하려면 어떻게해야합니까?
나는 또한 수천 개의 게시물을 보면서 특정 기본 클래스를 확장하는 일반 클래스를 기본 클래스 유형의 컬렉션에 넣을 수 있다고 말했다. 나는 이것을 완벽하게 잘 이해한다.
내 문제는 위의 링크 된 게시물과 다른 점이 하나의 기본 방식으로 다릅니다. 내 제네릭 클래스도 제네릭 인 기본 클래스를 가지고 있습니다. 더욱 나쁜 것은 MVVM 애플리케이션 프레임 워크 (사내 구축)의 일부이며 일반 기본 클래스에도 기본 클래스가 있다는 것입니다. 각 기본 클래스는 특정 속성과 기능을 추가하며 다음과 같이 보입니다 :
DataListEntry <T> < - BaseSynchronisableDataType <T> < - BaseAuditDataType < - BaseDataType < - BaseAnimatableDataType
응용 프로그램 컬렉션 클래스가 사용하는 유사한 내가 nheritance :
DataList에 <T> < - BaseSynchronisableCollection <T> < - BaseAnimatableCollection <T> < - BaseCollection <T> < - SortableObservableCollection <T>
더 나쁜 여전히 각 일반 선언에는 제약 조건이 있습니다. 오 즉, 예를 들어, BaseSynchronisableDataType <T>의 정의는 다음과 같습니다
public abstract class BaseSynchronisableDataType<T> : BaseAuditDataType,
ISynchronisable<T>, ICloneable<T>, IEquatable<T> where T : class, ICloneable<T>,
IEquatable<T>, new()
그래서 각 제네릭 컬렉션 형식은 일반적인 기본 클래스에 이러한 제약을 통해 연결되어 있습니다. 다행히도 지금까지 내 문제의 규모를 알 수 있습니다.
나는 위에서 언급하지 않은 인터페이스를 사용하여 콜렉션에서 해당 기본 클래스로 링크를 제거하려고 시도했지만 관련 클래스의 일부 일반 제약으로 인해 실패합니다. 예를 들어, 일부 기본 클래스에는 필수적인 '클래스'제약 조건이 필요하기 때문에 인터페이스 형식의 컬렉션을 만들 수 없으므로 컬렉션 유형이 비 추상 형식이어야한다는 오류가 발생합니다. 매개 변수없는 생성자를 일반 유형 또는 메소드에서 매개 변수 'T'로 사용하기 위해.
나는 모두가 DataList에 <T> 기본 클래스를 확장하는 다른 클래스와 컬렉션을 채울 필요가 : 참고로
마지막 점은 내가 할 노력하고 있어요 정확히 설명합니다. 이 클래스는 이름 만 다르며 정확히 동일한 속성을 갖습니다. 그들은 다음과 같이 선언된다 : 당신은 어떤 아이디어가 있다면
public class Writer : DataListEntry<Writer>
public class Artist : DataListEntry<Artist>etc.
가, 다음 날 ... 나는 이미이 문제에 2 일 동안 고통을했습니다 알려 주시기 바랍니다 내 상사는 것도 너무 만족입니다! 미리 감사드립니다, Sheridan.
이 솔루션은 실제로 컬렉션의 항목을 사용하여 수행해야하는 작업에 따라 달라집니다. 즉, 일단 컬렉션에 이러한 항목이 모두 있으면 컬렉션을 열거 할 때 각 항목으로 무엇을 할 것입니까? – Jay
이것은 WPF 응용 프로그램입니다. Type 객체를 전달 받고 UI에서 표시 할 컬렉션에서 해당 유형의 각 DataListEntry를 복구해야합니다. 그런 다음이 DataListEntry 유형 중 하나를 표시 할 수있는 컬렉션 객체가 UI에 필요합니다. – Sheridan
"해당 유형의 각 DataListEntry"라고 말하면 해당 유형을 실제로 의미합니까, 아니면 해당 유형이 일반적인 인수인지 의미합니까? 예를 들어'DataListEntry'이 전달 되었습니까, 아니면'MyType'이 전달되고'DataListEntry '을 반환해야합니까? –
Jay