2017-02-02 3 views
0

Я прочитал ниже заявление, в книге «C# в двух словах» Джозеф Albahari:Семантика движущие разрешенные абстрактные элементы в интерфейсе против абстрактного класса

интерфейс может содержать только методы, свойства, события и индексаторы, которые не совпадают - это как раз те члены класса, которые могут быть абстрактными.

Дело, которое заставило меня думать, почему автор говорит, что это происходит так , не случайно, который я думаю, что это не так. Я думаю, что это тот же фактор, который стимулирует эту возможность в обоих случаях.

Вот как я смотрю на это. Насколько я знаю, только следующие элементы могут быть объявлены как абстрактные в C#:

  1. A Метод
  2. A собственности
  3. индексатор
  4. Событие

Теперь над четырьмя вещами может, конечно, присутствовать в абстрактном классе, а также в интерфейсе. Таким образом, этот факт является ключевым драйвером того, что все может быть абстрактным внутри объекта, будь то класс или интерфейс.

Теперь кажется, что автор думает о чем-то другим, то есть контейнеры (абстрактный класс или интерфейс) являются движущим фактором для того, что они могут содержать, и это просто происходит не по совпадению, что в конечном итоге возможно появление абстрактных членов в этих двух местах оказывается одинаковым после завершения разработки компилятора.

Я хочу знать, знает ли кто-либо о различной внутренней семантике, которая управляет разрешенными абстрактными членами внутри интерфейса и абстрактным классом. То, как я смотрю на это, состоит в том, что только четыре типа элементов могут быть абстрактными, поэтому один и тот же факт должен стимулировать его возможность существования в контейнере, который может быть интерфейсом или абстрактным классом.

+1

'... и это просто происходит не по совпадению, что в конце концов, те абстрактные члены, которые возможны в этих двух местах, оказываются одинаковыми после того, как их проект компилятора был завершен. 'Я думаю, вы смешиваете значение *, не совпадающее * с * по совпадению *, - они имеют противоположные значения. Автор говорит, что именно * не * совпадение состоит в том, что интерфейсы могут содержать только те элементы, которые могут быть абстрактными в классе ... который, я думаю, также является тем, что вы говорите. –

ответ

1

Вы можете подумать о интерфейсе как абстрактном классе, который содержит только абстрактные члены (абстрактный класс также может содержать не абстрактные элементы).

Следовательно, это не совпадение, а необходимое следствие того, что типы членов, которые могут быть абстрактными в абстрактном классе, являются такими же, как типы элементов интерфейса, и наоборот.

Смежные вопросы