Для этих типов:
class A { }
class B
{
public static implicit operator A(B me)
{
return new A();
}
}
class Test where T : A { }
Я попробовал
var b = new Test();
И ожидал, что это не удастся, что и произошло. Но сообщение об ошибке
Тип «B» нельзя использовать в качестве параметра типа «T» в универсальном типе или методе «Test». Неявного преобразования ссылки из «B» в «A» нет.
Но существует неявное преобразование ссылки из B в A. Это просто странное сообщение? Существует не неявное преобразование ссылки, как показывает ответ Адама Робинсона. Сообщение правильное.
Обратите внимание, что MSDN говорит:
где T: (имя базового класса) - аргумент типа должен быть или производным от указанного базового класса.
Это объясняет, почему это запрещено, поскольку B
не является производным от A