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