Sobes.tech
Middle+

Меъёри татбиқи барномасозии объектӣ дар Go ва C#-ро муқоиса кунед.

sobes.tech AI

Ҷавоб аз AI

У Go няма класічна обектно-орієнтована спадковість і класи в традиційному розумінні. Замість цього Go використовує композицію та інтерфейси.

Основні відмінності:

  • Класи та об'єкти: C# базується на класах, з яких створюються об'єкти. Go використовує структури (structs), які можуть мати методи.
  • Спадковість: C# підтримує одинарну та множинну (через інтерфейси) спадковість. Go підтримує композицію (вбудовування структур) та поліморфізм через інтерфейси.
  • Інтерфейси: В C# інтерфейси мають явно реалізовуватися класом. В Go інтерфейси реалізуються неявно: якщо структура має методи, що відповідають сигнатурі інтерфейсу, вона автоматично його реалізує.
  • Видимість (Access Modifiers): В C# використовуються public, private, protected, internal. В Go видимість визначається регістром першої літери імені: верхній регістр — публічний, нижній — приватний (в межах пакету).
  • Дженерики: C# має розвинену систему дженериків. Go додав підтримку дженериків з версії 1.18.

Приклад композиції в Go:

package main

import "fmt"

type Engine struct {
	Type string
}

func (e Engine) Start() {
	fmt.Printf("%s двигун запущено!\n", e.Type)
}

type Car struct {
	Model string
	Engine // анонімне вбудовування - композиція
}

func main() {
	myCar := Car{
		Model: "Sedan",
		Engine: Engine{
			Type: "Бензин",
		},
	}
	fmt.Printf("Модель авто: %s\n", myCar.Model)
	myCar.Start() // виклик методу вбудованої структури
}

Приклад реалізації інтерфейсу в Go:

package main

import "fmt"

type Speaker interface {
	Speak() string
}

type Dog struct{}

func (d Dog) Speak() string {
	return "Вау!"
}

type Cat struct{}

func (c Cat) Speak() string {
	return "Мяу!"
}

func main() {
	animals := []Speaker{Dog{}, Cat{}} // слайс типів, що реалізують інтерфейс Speaker
	for _, animal := range animals {
		fmt.Println(animal.Speak())
	}
}

У таблиці:

Ознака Go C#
Класи Немає (структури) Так
Об'єкти Екземпляри структур Екземпляри класів
Спадковість Композиція, інтерфейси Класична (одинарна), інтерфейси
Інтерфейси Неявна реалізація Явна реалізація
Видимість Регістратор першої літери public, private, protected, і т.д.
Дженерики З версії 1.18 Так

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