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# дотримується більш традиційної ієрархічної моделі.