다음과 같은 경우가 있습니다. 이 코드는 Test2에 대해 컴파일러 오류를 발생시킵니다..net 제네릭 제약 및 개체 상속 컴파일 문제
제네릭 형식 또는 메서드 'panelGenericIOGrid'에서 'InheritedChild'형식 매개 변수 'T'로 사용할 수 없습니다. 'InheritedChild'에서 'SerializerBase'로의 암시 적 참조 변환은 없습니다.
public class SerializerBase<T>
{
}
public class DirectChild : SerializerBase<DirectChild>
{
}
public class InheritedChild : DirectChild
{
}
public class panelGenericIOGrid<T> : UserControl
where T: SerializerBase<T>, new()
{
}
...
panelGenericIOGrid<DirectChild> test;
panelGenericIOGrid<InheritedChild> test2;
...
나는 나의 implentation이 funadmentally wrong라고 확신한다. 다음과 같은 상황에서, DirectChild와 InheritedChild는 모두 SerializerBase 생성자에 적절한 타입을 제공합니다.
어떻게 코드를 작동시켜야합니까? 감사!
실제 정보에 대한 정보입니다. SerializerBase에는 유형에 따라 자동으로 직렬화 및 비 직렬화되도록 구현 된 정적 함수 세트가 있습니다.
DirectChild에는 디스크에 저장되어 복구 될 문자열 집합이 있습니다.
Inhertiedchild에는 DirectChild의 모든 멤버와 더 많은 멤버가 있습니다.
는 기본적으로 나는 직렬화가 SerializeBase
인터페이스가 가장 좋은 방법이라고 생각합니다. 추가 코드가 될 것이지만 BaseSerializer의 모든 메서드는 정적이므로 너무 많은 추가 작업이 필요하지 않습니다. 감사! – greggorob64
모든 메서드가 정적이라면 나는 정말로 믹스 인 접근법을 따라야한다고 생각한다. 상속은 인터페이스에서 정적 메서드를 가질 수없고 정적 인 인터페이스 메서드를 구현할 수 없으므로이 경우에 이해가되지 않는다. 사람. –