C# обобщения

Рейтинг: 1Ответов: 1Опубликовано: 23.01.2015

Друзья, подскажите, пожалуйста.

interface ITest<T>
{
}
class a<T> where T : ITest<T>
{
}
class b : ITest<b>
{
}
class c
{
    static void Main()
    {
        a<b> A = new a<b>();
    }
}

Почему если строчку class b : ITest<b> заменить на class b : ITest<int>, то код не компилится. Какая разница int там или b? Спасибо.

Ответы

▲ 3Принят

Ну вы же сами наложили условие на тип T. У вас T : ITest<T>.

Для типа b условие выполняется, т. к. b : ITest<b>. А для int — нет.

Если бы вместо ITest у вас было IEquatable, условие бы сработало, т. к. согласно документации int : IEquatable<int> .