두 가지 일반 기본 클래스가 있습니다. 두 번째 일반 클래스에는 첫 번째 클래스의 매개 변수에 대한 제약 조건이 있습니다.일반 매개 변수 및 추상 클래스가있는 일반 본
abstract class FirstClass<T> {...}
abstract class SecondClass<U> where U : FirstClass {...}
FirstClass가 정의되어 있지 않아서 작동하지 않습니다. 그래서 나는 이것을해야한다.
abstract class FirstClass<T> {...}
abstract class SecondClass<U, T> where U : FirstClass<T> {...}
다음 중 어떤 것입니까? 그러나 이로 인해 이러한 추상 클래스가 추악하게 구현됩니다.
class SomeClass {...}
class MyFirstClass : FirstClass<SomeClass> {...}
class MySecondClass : SecondClass<MyFirstClass, SomeClass> {...}
SomeClass를 두 번 지정했기 때문에 이것은 과장된 것 같습니다. FirstClass의 T가 자동으로 SecondClass의 U라는 방식으로이를 선언하는 방법이 있습니까? 내가 이렇게 보이기를 정말로 좋아할 것입니다.
class SomeClass {...}
class MyFirstClass : FirstClass<SomeClass> {...}
class MySecondClass : SecondClass<MyFirstClass> {...}
이 정확한 시나리오가 의심 스럽지만, 내가하고 싶은 일을 어떻게해야할까요?
편집
몇몇 사람들은 IFirstClass 인터페이스을 제안했다. 그러나 나의 정의는 이것에 더 가깝다.
class FirstClass<T>
{
public T MyObj { get; set; }
}
class SecondClass<U, T> where U : FirstClass<T>
{
U MyFirstClass { get; set; }
}
인터페이스를 사용하면 SecondClass의 MyFirstClass.MyObj에 액세스 할 수 없습니다. IFirstClass에 object T MyObj { get; set; }
을 만들 수 있지만 new
을 사용하면 그것을 숨길 수 있습니다. 이렇게하면 실버 라이트가 바인딩에 적합합니다.
질문에서 silverlight는 언급하지 않지만 실버 라이트 프로젝트입니다. 이것이 해결책을 제한 할 지 모르겠습니다. – cadrell0
제네릭은 WCF 또는 WCF RIA 서비스로 노출 될 수 없기 때문에 WCF RIA Services의 TypeOf을 POCO 클래스로 마샬링하려고하면 솔루션이 제한됩니다 (주요 해결 방법은 없음). –
FirstClass 에 대한 특정 유형의 정보를 사용하고 있습니까? 그렇지 않은 경우 FirstClass 을 일부 IGenericFirstClass 인터페이스와 일치시킨 다음 IGenericFirstClass로 제약 조건을 지정하면됩니다. U 형 종속성을 숨 깁니다. –