Почему скрыт метод интерфейса?
Методы интерфейса по умолчанию - именно это. Метод в интерфейсе является реализацией по умолчанию, если не предоставлена другая реализация .
В каждом из ваших случаев вы предоставили реализацию, поэтому значение по умолчанию не будет использоваться.
Когда вы предоставляете реализацию не по умолчанию, мы предполагаем, что новая реализация на лучше , чем реализация по умолчанию; если бы это было не лучше, вы бы не предоставили это , верно? Вы не сделали бы работу без причины, и, вероятно, вы хотите, чтобы ваша работа использовалась. Для среды выполнения было бы глупо sh вызывать реализацию по умолчанию, когда существует лучшая реализация.
Как я все еще могу это назвать?
В вашем коде ты не
Если вы хотите всегда иметь реализацию по умолчанию, которую вы можете вызвать, вы можете сделать что-то вроде:
public interface IInterface
{
public void M1() => MyHelperMethods.M1(this);
}
public static class MyHelperMethods
{
public static void M1(IInterface i) =>
Console.WriteLine("Call from static");
}
А теперь, если вы хотите вызвать реализацию по умолчанию, вы можете позвонить MyHelperMethods.M1
напрямую.