Универсальные шаблоны с универсальными параметрами и абстрактный класс

У меня есть два общих базовых класса. Второй универсальный класс имеет ограничение на свой параметр первого класса.

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. Есть ли способ объявить это таким образом, чтобы T из FirstClass автоматически становился U для SecondClass. На самом деле мне бы хотелось, чтобы это выглядело так.

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; }
}

С интерфейсом я не могу получить доступ к MyFirstClass.MyObj из SecondClass. Хотя я мог создать объект T MyObj {get; установлен; } в IFirstClass, затем используйте new , чтобы скрыть его, silverlight подгонит привязку, если я сделаю это.

15
задан cadrell0 5 April 2011 в 18:39
поделиться