Вы не можете сделать это, потому что эти методы будут иметь одинаковую сигнатуру, и CSC не сможет определить, какой метод должен быть статически связан для каждого вызова.Например:
public class TestClass
{
public int FooMethod()
{
return 1;
}
public void FooMethod()
{
return;
}
public string FooMethod()
{
return "foo";
}
}
static void Main()
{
TestClass test = new TestClass();
Console.WriteLine(test.FooMethod()); // which FooMethod should be called here?
}
Тип возвращаемого значения метода не считается частью его сигнатуры.То, что вы можете сделать, это перегрузить один и тот же метод другой сигнатурой, чтобы получить другой тип.Кроме того, в случае использования дополнительного метода, который отличается только возвратом void
, вы всегда можете выбрать не использовать результат, возвращаемый исходным методом.
Случай с интерфейсами аналогичен.когда класс реализует интерфейс, он соглашается с протоколом, что он реализует поведение этого интерфейса, которое ожидают потребители вашего класса.Таким образом, вы не можете частично согласиться с интерфейсом.Хотя вы можете выдать NotImplementedException
в ваших реализациях, вы должны как минимум определить всех членов, что приводит к той же проблеме, упомянутой в приведенном выше примере: компилятор C # не сможет статически связывать ваш методзвонки и ваш код не будет компилироваться.
Вы можете решить свою проблему, пересмотрев свой дизайн.