C# çoklu kalıtım alamama

Bbaran1

Decapat
Katılım
22 Mayıs 2022
Mesajlar
82
Daha fazla  
Sistem Özellikleri
CPU 5600G, ram 2x8 gb 3200 mhz ddr4, 75 hz monitör, b450M HDV anakart, kioxa 500 gb nvme ssd.
Cinsiyet
Erkek
Meslek
Öğrenci
Merhaba, interface kullanamadığım ve çoklu kalıtım almam gereken bir projede C#'ta çoklu kalıtım alma yok diye alamıyorum. Yapmak istediğim şey bu;

CustomerManager(içerisi prop dolu) sınıfındaki bilgileri kalıtım alıp Customer sınıfına ve Developer sınıfına aktarmak. Aynı zamanda bunlara ProductManager sınıfındaki verileri de aktarmam gerek. Ancak bunda interface de kullanamıyorum bunda.
 
Son düzenleyen: Moderatör:
Yapmak istediğiniz şeyi daha detaylı anlatır mısınız? Tam anlayamadım. Şimdi kurguyu sanırım şöyle yaptınız; Customer ve Developer, CustomerManager'dan türerken aynı zamanda ProductManager'dan da türemesi gerekiyor. Böyle bir şey olamaz ve zaten çok garip bir durum.

Bir kere Entity'ler neden Service'lerden türüyor bunu tam anlayamadım. Yani Servis ile Entity arasında bir kalıtım olmamalı. Hele ki Customer'ın CustomerManager'dan türemesi hiç olmamalı.

Doğru yapıyı şöyle kurmayı deneyin:
C#:
public class Customer : BaseEntity {
    //Properties...
}

public class Developer : BaseEntity {
    //Properties...
}

public class ProductManager : IProductService {
    //Methods...
}

public class CustomerManager : ICustomerService {
    private readonly IProductService _productService;
    
    public CustomerManager(IProductService productService){
        _productService = productService;
    }
    //Methods...
}
 
Merhaba, interface kullanamadığım ve çoklu kalıtım almam gereken bir projede C#'ta çoklu kalıtım alma yok diye alamıyorum. Yapmak istediğim şey bu;

CustomerManager(içerisi prop dolu) sınıfındaki bilgileri kalıtım alıp Customer sınıfına ve Developer sınıfına aktarmak. Aynı zamanda bunlara ProductManager sınıfındaki verileri de aktarmam gerek. Ancak bunda interface de kullanamıyorum bunda.
Çoklu kalıtım interfaceler için var, kalıtım almak istediğiniz iki sınıftan birini interface yapamıyorsanız ara bir sınıf oluşturup, iki sınıftan birinin proplarını ona kopyalayıp diğer sınıfların proplarını da kalıtım alarak o sınıfa verebilirsiniz. Sonra ise Customer ve Developer sınıfına bu ara sınıftan kalıtım alırsınız.
 
Son düzenleme:
Yapmak istediğiniz şeyi daha detaylı anlatır mısınız? Tam anlayamadım. Şimdi kurguyu sanırım şöyle yaptınız; Customer ve Developer, CustomerManager'dan türerken aynı zamanda ProductManager'dan da türemesi gerekiyor. Böyle bir şey olamaz ve zaten çok garip bir durum.

Bir kere Entity'ler neden Service'lerden türüyor bunu tam anlayamadım. Yani Servis ile Entity arasında bir kalıtım olmamalı. Hele ki Customer'ın CustomerManager'dan türemesi hiç olmamalı.

Doğru yapıyı şöyle kurmayı deneyin:
C#:
public class Customer : BaseEntity {
    //Properties...
}

public class Developer : BaseEntity {
    //Properties...
}

public class ProductManager : IProductService {
    //Methods...
}

public class CustomerManager : ICustomerService {
    private readonly IProductService _productService;
   
    public CustomerManager(IProductService productService){
        _productService = productService;
    }
    //Methods...
}
Şunu yapmak istiyorum ve sanırım buldum nasıl yapacağımı. Tek yapmak istediğim developer da customer da product sınıfını kalıtım alması. Ancak şunu da eklediğimden projeye yapamıyorum interface de alamıyorum. Developer sınıfı customer sınıfını kalıtım almalı çünkü direkt customer sınıfındaki bazı bilgiler ile developer hesabı açılabilecek. Google mantığı gibi düşünün, giriş yap dersiniz google hesqplarını çıkar onunla hesabı açarsınız google hesabınızdaki bilgilerle geliştirici hesabını açarsınız ve sadece birkaç farklı bilgi daha girmek gerektir. Ben de bunu yapmaya çalışıyorum.
 
C++ tarzı multi inheritance mı? Yoksa multi level inheritance mı?

C# Multi level inheritance;
C#:
    class A
    {
        protected int a;
    }
    class B : A
    {
        protected int b;
    }
    class C : B
    {
        protected int c;
        C() {
            a = 1;
            b = 2;
            c = 3;
        }
    }

C++ multi inheritance;
C++:
class A {
    protected:
    int a;
};

class B {
    protected:
    int b;
};

class C : public A, public B {
    public:
    C() {
        a = 1;
        b = 2;
    }
};

C#, C++ tarzı multi inheritance'a izin vermiyor. Ama multi level inheritance'a izin var.
 
Peki, geliştirici ve müşteri neden bir "ürün"den miras alıyor açıklayabilir misiniz? Ayrıca interface almak ne demek? Biraz daha sade anlatabilirseniz size daha rahat yardımcı olabiliriz. @TheAny nin dediği gibi C#'ta bir sınıf doğrudan iki sınıfdan türeyemez. Ama B, A'dan türerse ve C de B'den türerse C otomatik olarak A tarafından da kalıtılmış olur.
 

Technopat Haberler

Geri
Yukarı