Рассмотрят следующий интерфейс:Внедрение универсального интерфейса отсутствует новое ограничение
public interface IFoo
{
M Bar<M>();
}
Попытки осуществить это с
class Foo : IFoo
{
public M Bar<M>()
{
return new M();
}
}
не работает, компилятор жалуется M
не хватает new()
ограничения.
Когда я добавить ограничение, как в
class Foo : IFoo
{
public M Bar<M>() where M : new()
{
return new M();
}
}
этого еще не делает трюк, так как ограничения Foo.Bar
не соответствуют ограничениям метода интерфейса теперь (и я не могу изменить что).
documentation for the compiler error CS0425 говорит
Чтобы избежать этой ошибки, убедитесь, где положение идентично в обоих деклараций, либо реализуют интерфейс явно.
Если «реализация интерфейса явно» является решением: как это сделать?
Это потому, что вам нужно вернуть новый или вам нужно что-то вернуть, когда больше нечего возвращать? Будет ли «default (M)» быть достаточно хорошим? Он возвращает значение по умолчанию для данного генерического типа, для ссылок это «null». В противном случае для создания экземпляра вам понадобятся деревья выражений или отражение. –