Разница между интерфейсом, абстрактным классом, закрытым классом, статическим классом и частичным классом в С#?

Разница между интерфейсом, абстрактным классом, закрытым классом, статическим классом и частичным классом в С#? Если все классы доступны в vb.net?

Ответ 1

  • абстрактный класс
    Следует использовать, когда есть связь IS-A, и никакие экземпляры не должны создаваться из этого абстрактного класса. Пример: Animal - это абстрактный базовый класс, в котором конкретные животные могут быть получены, например, Horse, Pig и т.д. Создавая Animal abstract, нельзя создавать экземпляр Animal.

  • интерфейс
    Интерфейс должен использоваться для реализации функциональных возможностей в классе. Предположим, мы хотим, чтобы лошадь могла прыгать, можно создать интерфейс IJumping. Добавив этот интерфейс к Horse, все методы в IJumping должны быть реализованы. В IJumping только объявления (например, StartJump и EndJump определены), в Лошаде должны быть добавлены реализации этих двух методов.

  • закрытый класс
    Заставляя Лошадь запечатанной, на нее невозможно наследовать, например. делая классы, такие как Pony или WorkHorse, которые вы любите наследовать от Лошади.

  • статический класс
    В основном используется для функций "полезности". Предположим, вам нужен какой-то метод для вычисления среднего числа чисел, которые будут использоваться в классе лошадей, но вы не хотите ставить его в Лошадь, так как он не имеет отношения, и он также не связан с животными, вы можете создать класс для имеют такие методы. Вам не нужен экземпляр такого класса утилиты.

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

Ответ 2

  • Интерфейс: только определения методов

  • Абстрактный класс: некоторые реализации метода, некоторые методы абстрактные (только определение метода)

  • Запечатанный класс: класс, из которого вы не может наследовать

  • Статический класс: класс с статические методы (без экземпляров существуют, все методы можно назвать без экземпляра)

  • Частичный класс: класс, который определенных в 2 или более отдельных определения классов в разных модули.

Да, все они доступны как в С#, так и в VB, хотя в некоторых случаях VB использует разные ключевые слова.

Ответ 3

Я думаю, следующая ссылка будет полезна для вас.

http://letschattechnology.com/interface-vs-abstract-classes/

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

Ответ 4

Ниже приведены различия между абстрактным и интерфейсом:

  • Абстрактные классы имеют объявление метода, а также определение метода, тогда как интерфейсы имеют только объявление метода.

  • Абстрактные классы известны как частичные абстрактные классы, тогда как интерфейсы известны как полностью абстрактные классы.

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

  • Абстрактные классы поддерживают спецификаторы доступа, тогда как интерфейсы не поддерживают спецификаторы доступа.

  • Абстрактные классы имеют обычные переменные, а также постоянные переменные, тогда как интерфейсы не имеют переменных.

  • Мы можем писать конструкторы в абстрактных классах, тогда как мы не можем писать конструкторы в интерфейсах.

Ответ 5

Класс A normal может быть создан во время выполнения для формирования объекта с полями (поля - это свойства, функции, события и т.д.). Класс normal также может быть унаследован/субклассифицирован.

Добавление одного из дополнительных ключевых слов изменяет способ работы класса.

  • Добавление public, private, protected изменяет способ отображения другого кода и использования этого класса.
  • Добавление static в класс означает, что вы не можете создать экземпляр с новым ключевым словом, но вы можете получить доступ к нему только с помощью статической функции. Пример: String.IsNullOrEmpty().
  • Добавление sealed в класс означает, что ни один другой класс не может наследовать "закрытый" класс.

Интерфейсы contracts говорят, что реализующий класс предоставит некоторые функции. Интерфейс IDisposable говорит, что все классы, реализующие его, будут иметь функцию Dispose.

Ответ 6

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