Как Microsoft это сделала: абстрактный метод в классе stati c? - PullRequest
0 голосов
/ 27 мая 2020

Насколько я знаю, абстрактные методы могут существовать ТОЛЬКО в абстрактных классах. Несмотря на это, я вижу, что Microsoft сделала это (в Xamarin.Forms):

  public static class DependencyService
  {
    ….
        public static void Register<T>() where T : class;
    ….
  }

Это абстрактный метод в НЕ абстрактном классе. Как это может быть?

Ответы [ 2 ]

5 голосов
/ 27 мая 2020

Это абстрактный метод в НЕ абстрактном классе

Нет? Это не. С чего вы взяли, что это абстрактный метод? Это метод открытого типа, который вы можете вызвать, указав тип (Register ()) и не имеющий НИЧЕГО общего с абстрактным.

Теперь вы говорите - у него нет тела. Конечно? Это больше похоже на то, что вы просто не ВИДЕТЕ тело, потому что у вас нет доступа к коду, и это может быть код стиля «открытая ссылка» без доступа к стилю исходного кода (показывая подпись, но не тело).

2 голосов
/ 27 мая 2020

Абстрактный метод должен иметь ключевое слово abstract. Подпись метода в вашем вопросе:

public static void Register<T>() where T : class;

имеет НЕ ключевое слово abstract.

Xamarin.Forms - проект с открытым исходным кодом, вы можете посмотрите исходный код в их репозитории GitHub.

Щелкните здесь , чтобы увидеть фактический код метода, о котором вы говорите.

...