Sobes.tech
Middle+

Go ve C#'ta nesne yönelimli programlamanın uygulamasını karşılaştırın.

sobes.tech yapay zeka

AI'dan gelen yanıt

Go'da klasik nesne yönelimli kalıtım ve sınıflar geleneksel anlamda yoktur. Bunun yerine, Go bileşim ve arayüzleri kullanır.

Ana farklar:

  • Sınıflar ve nesneler: C# sınıflar üzerine kuruludur, bunlardan nesneler oluşturulur. Go yapılar (structs) kullanır ve bunlar metodlara sahip olabilir.
  • Kalıtım: C# tek ve çoklu kalıtımı (arayüzler aracılığıyla) destekler. Go, bileşim (yapıların gömülmesi) ve arayüzler aracılığıyla çok biçimlilik sağlar.
  • Arayüzler: C#'ta arayüzler açıkça uygulanmalıdır. Go'da, yapılar arayüzleri dolaylı olarak uygular: eğer bir yapı, arayüzün imzasına uygun metodlara sahipse, otomatik olarak uygular.
  • Erişim belirteçleri: C#'ta public, private, protected, internal kullanılır. Go'da görünürlük, ismin ilk harfi büyükse dışa açıktır, küçükse paket içi görünür.
  • Generics: C# gelişmiş bir generics sistemine sahiptir. Go, 1.18 sürümünden itibaren generics desteği eklemiştir.

Go'da bileşim örneği:

package main

import "fmt"

type Engine struct {
	Type string
}

func (e Engine) Start() {
	fmt.Printf("%s motor başladı!\n", e.Type)
}

type Car struct {
	Model string
	Engine // Anonim gömme - bileşim
}

func main() {
	myCar := Car{
		Model: "Sedan",
		Engine: Engine{
			Type: "Benzin",
		},
	}
	fmt.Printf("Araba modeli: %s\n", myCar.Model)
	myCar.Start() // Gömülü yapının metodunu çağırma
}

Arayüz uygulaması örneği:

package main

import "fmt"

type Speaker interface {
	Speak() string
}

type Dog struct{}

func (d Dog) Speak() string {
	return "Hav!"
}

type Cat struct{}

func (c Cat) Speak() string {
	return "Miyav!"
}

func main() {
	animals := []Speaker{Dog{}, Cat{}} // Speaker arayüzünü uygulayan tiplerin dilimi
	for _, animal := range animals {
		fmt.Println(animal.Speak())
	}
}

Tabloda:

Özellik Go C#
Sınıflar Yok (yapılar) Evet
Objeler Yapı örnekleri Sınıf örnekleri
Kalıtım Bileşim, arayüzler Geleneksel (tekli), arayüzler
Arayüzler Dolaylı uygulama Açık uygulama
Görünürlük İlk harf büyükse görünür public, private, protected vb.
Generics 1.18 sürümünden itibaren Evet

Go'nun OOP yaklaşımı daha merkezi olmayan ve davranışlara (arayüzler aracılığıyla) ve veri yapılarına (gömme yoluyla) odaklanmıştır, bu da genellikle daha esnek ve test edilmesi kolay kodlara yol açar. C# daha geleneksel ve hiyerarşik bir modeli benimser.