Этот пример является упрощением реальной проблемы, но как я могу заставить его скомпилировать? Я ожидал, что ограничения дженериков будут распространяться.
Поскольку T - это TClass, а TClass - это класс, почему T не является классом?
public class MyClass<TClass> where TClass : class
{
public void FuncA<Ta>() where Ta : class
{
}
public void FuncB<Tb>() where Tb : TClass
{
}
public void Func<T>()
where T : TClass
{
FuncA<T>();
FuncB<T>();
}
}
EDIT :
Это действительно работает. Эрик Липперт заставил меня задуматься, спасибо.
Поскольку T - это TClass, а TClass - это TAnotherType, T на самом деле является TAnotherType.
public class MyClass<TClass, TAnotherType> where TClass : TAnotherType
{
public void FuncA<Ta>() where Ta : TClass
{
}
public void FuncB<Tb>() where Tb : TAnotherType
{
}
public void Func<T>()
where T : TClass
{
FuncA<T>();
FuncB<T>();
}
}