Учитывая class ABC : IX, IY { }
и Foo<ABC>
, ожидаете ли вы тогда использовать new XY()
?Потому что у тебя не должно быть этого ожидания.Компилятор тоже не будет.
T не всегда будет XY.T будет ABC, DEF или что-нибудь еще , которое может реализовать ваши два интерфейса и, следовательно, соответствовать вашим ограничениям.XY не может быть преобразовано в ABC, DEF или из любых бесконечных возможностей для T , и поэтому у вас есть сообщение об ошибке: неявное преобразование XY в T невозможно.
Чтобыло бы законно, просто есть new T()
, и это верно только , если метод ограничен для его поддержки.
void Foo<T>() where T : IX, IY, new()
{
T obj = new T();
}