Допустим, у вас есть два интерфейса IDoStuff<T>
и IDoStuff
, которые реализует ваш класс.У них обоих есть метод "GetStuff", но у одного есть подпись T GetStuff()
, а у другого подпись object GetStuff()
.
Проблема в том, что .net не позволит вам иметь два метода с одинаковыми именами, которые отличаются только типом возвращаемого значения.Но вам нужно иметь оба этих метода в своем классе, чтобы удовлетворить оба интерфейса.Если T
на самом деле object
, то вы можете использовать явную реализацию следующим образом.
public T GetStuff()
{
T stuff;
//Stuff Is Got
return stuff;
}
IDoStuff.GetStuff()
{
return (object)GetStuff();
}
Обратите внимание, что поскольку IDoStuff
требует требований безопасности GetStuff
, IDoStuff.GetStuff
будет public/private/protected/internal
на основе объявления этого интерфейса.
Если вы хотите, вы можете сделать каждую имплантацию явно, но полное имя метода для каждого будет InterfaceName.MethodName
, и это будет немного раздражать при чтении и записи.Обычно это используется, только если вы хотите реализовать метод с одной и той же сигнатурой несколько раз для удовлетворения нескольких интерфейсов.