Есть ли система типов, которая позволяет переопределить M<U> как U в наследнике ?
Например имея Nullable<int> в базовом классе , наследник мог бы определить int , тем самым усиливая условия и удовлетворяя требованием базового.
class A
{
virtual Nullable<int> X { get { return null; } }
}
class B : A
{
override int X { get { return 1; } }
}
Ну и далее в общем случае имея скажем List<U> определить в наследнике U или явно пустой список.