Обсуждение я хотел бы начать с интерфейсов. И так, interface - именованный набор сигнатур данных.Помимо методов интерфейс может содержать, также, события и свойства! С# не позволяет определять в интерфейсе статические члены (т.к. CLS-совместимый интерфейс не может содержать подобных членов), хотя CLR сие допускает.
CLR требует, чтобы методы интерфейса были виртуальными.Если метод явно не определён в коде как виртуальный, компилятор сделает его таковым и , вдобавок, изолированным. Это не позволяет производному классу переопределять методы интерфейса. Если явно задать метод как виртуальный, компилятор сделает его таковым и оставит неизолированным, что предоставит
производному классу возможность переопределять методы интерфейса.
Отличия абстрактного класса от интерфейса
Абстрактный класс:
1. Могут быть реазизованы некоторые методы внутри класса.
2. Если производный класс реализует не все абстрактные методы, то должен быть также абстрактным классом.
3. Может содержать поля.
4. При реализации абстрактного метода в производном классе необходимо использовать
override.
5. Может иметь конструкторы Но и там и там есть свойства (!).
Интерфейс:
1. Ни один метод не может быть реализован в самом интерфейсе.
2. Когда класс наследует интерфейс, то должен реализовывать все методы, определённые в интерфейсе. Иначе - ошибка компиляции.
3. НЕТ. Интерфейсы не могут содержать полей данных.
4. Не надо.
5. Не может содержать контрукторы.
Измерять продуктивность программирования подсчетом строк кода — это так же, как оценивать постройку самолета по его весу (Bill Gates).
CLR требует, чтобы методы интерфейса были виртуальными.Если метод явно не определён в коде как виртуальный, компилятор сделает его таковым и , вдобавок, изолированным. Это не позволяет производному классу переопределять методы интерфейса. Если явно задать метод как виртуальный, компилятор сделает его таковым и оставит неизолированным, что предоставит
производному классу возможность переопределять методы интерфейса.
Отличия абстрактного класса от интерфейса
Абстрактный класс:
1. Могут быть реазизованы некоторые методы внутри класса.
2. Если производный класс реализует не все абстрактные методы, то должен быть также абстрактным классом.
3. Может содержать поля.
4. При реализации абстрактного метода в производном классе необходимо использовать
override.
5. Может иметь конструкторы Но и там и там есть свойства (!).
Интерфейс:
1. Ни один метод не может быть реализован в самом интерфейсе.
2. Когда класс наследует интерфейс, то должен реализовывать все методы, определённые в интерфейсе. Иначе - ошибка компиляции.
3. НЕТ. Интерфейсы не могут содержать полей данных.
4. Не надо.
5. Не может содержать контрукторы.
Измерять продуктивность программирования подсчетом строк кода — это так же, как оценивать постройку самолета по его весу (Bill Gates).
постройка самолета оценивается по весу проектной документации к нему (директор КБ)
ОтветитьУдалить