Распространение ограничений дженериков C #

Этот пример является упрощением реальной проблемы, но как я могу заставить его скомпилировать? Я ожидал, что ограничения дженериков будут распространяться.

Поскольку 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>();
    }
}
5
задан MatteS 4 November 2011 в 08:37
поделиться