Middle+
71
questionbank

Сравните реализацию объектно-ориентированного программирования в Go и C#.

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

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

Основные отличия:

  • Классы и объекты: C# основан на классах, из которых создаются объекты. Go использует структуры (structs), которые могут иметь методы.
  • Наследование: C# поддерживает одиночное и множественное (через интерфейсы) наследование. Go поддерживает композицию (встраивание структур) и полиморфизм через интерфейсы.
  • Интерфейсы: В C# интерфейсы должны явно реализовываться классом. В Go интерфейсы реализуются неявно: если структура имеет методы, соответствующие сигнатуре интерфейса, она автоматически реализует этот интерфейс.
  • Видимость (Access Modifiers): В C# используются public, private, protected, internal. В Go видимость определяется регистром первой буквы имени: верхний регистр - публичный, нижний регистр - приватный (в пределах пакета).
  • Дженерики (Generics): C# имеет развитую систему дженериков. Go добавил поддержку дженериков начиная с версии 1.18.

Пример композиции в Go:

go

Пример реализации интерфейса в Go:

go

В таблице:

ПризнакGoC#
КлассыНет (есть структуры)Да
ОбъектыЭкземпляры структурЭкземпляры классов
НаследованиеКомпозиция, интерфейсыКлассическое (одиночное), интерфейсы
ИнтерфейсыНеявная реализацияЯвная реализация
ВидимостьРегистр первой буквыpublic, private, protected, и др.
ДженерикиС версии 1.18Да

Подход Go к ООП более децентрализован и сфокусирован на поведении (через интерфейсы) и структуре данных (через встраивание), что часто приводит к более гибкому и легко тестируемому коду. C# придерживается более традиционной иерархической модели.