Şimdi Ara

C# interface hakkında sorularım : (sorular resmin içinde)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
5
Cevap
1
Favori
619
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • C# interface hakkında sorularım  : (sorular resmin içinde)
    buradaki okların çıktıkları yerleri anlaamadım arkadaşlar açıklayabilir misiniz ?



  • alttaki classin icindeki void IMemeli.Konus() normal bir metod. ama IMemeli.xyz seklinde olunca buna explicit interface implementation deniyor. bunun yerine public yapilip sadece Konus() da denebilirdi ki buna da implicit interface implementationd deniyor.

    ikisinin farki ise implicit olunca classin disindan o metodu normal bir sekilde gorebilirken, explicit olanda sadece elindeki nesneyi o interface'e cast edip erisebiliyorsun

    Kedi kedi = new Kedi(); // instantiation. normal sekilde nesne olusturduk
    kedi.Konus(); // konus metodu implicit ise calisir, explicit ise olmaz. bunun ustesinden ise kedi degiskenini IMemeli'ye cast ederek gelebilirsin

    IMemeli memeli = new Kedi(); // instantiation. Kedi turunde nesne olusturup IMemeli turunde bir degiskene atadik. bu durumda C# burada IMemeli'ye ait metodlari ve property'leri gorur, Kedi'ye ait olanlari gormez. gorebilmek icin cast etmen gerekir.
    memeli.Konus(); // iki durumda da calisir

    cast etmek:
    (tip)degisken veya degisken as tip seklinde cast yapilir. farki:
    (tip) yapinca eger degisken o tipe cast edilemezse yani o tipte bir nesne degilse InvalidCastException firlatir.
    as tip seklinde yaparsan eger degisken o tipe cast edilemezse bu sefer bu expression null degerini alir.
    ornek:

    var memeli = (IMemeli)new Kedi(); // sorunsuz calisir
    var memeli2 = new Kedi() as IMemeli; // bu da ayni sekilde calisir

    simdi tamamen baska bir interface olsun IMemeliOlmayan diye:
    var memeliOlmayan = (IMemeliOlmayan)new Kedi(); // Kedi bu interfaceden olmadigi icin cast basarisiz olur ve exception firlatir.
    var memeliOlmayan2 = new Kedi() as IMemeliOlmayan; // Kedi bu interfaceden olmadigi icin cast basarisiz olur ve memeliOlmayan2 ifadesi null degerini alir.

    (tip) seklinde olani sadece verilen nesnenin o turden oldugundan emin oldugun yerlerde kullan,
    "as"li olani da diger yerlerde. ve castten sonra o degisken null mi diye kontrol edebilirsin.

    ----------
    resimi direkt anlatmak gerekirse:
    ilk kisimda "k" isimli Kedi turundeki degiskeni IMemeli'ye cast ediyor, ve IMemeli'ye ait olan Konus() metodunu cagiriyor.
    (cast etmesi gerekti cunku explicit olarak tanimli o metod Kedi classinda. implicit olsaydi yani normal Konus adli public bir metod olsaydi Kedi turunden cast etmeden de kullanilabilirdi.
    ayirca, cast etme isleminin bu sekilde parantezle yapilmasi gerekmiyor cunku zaten belli olan bir sey. degisken tanimlama sirasinda IMemeli k = new Kedi(); denseydi cast edilmis halde olacakti. burada iki taraftaki tipler farkli oldugu halde ise yaramasinin sebebi implicit cast edilmis olmasi. (implicit/explicit interface implementation ile implicit/explicit cast farkli seylerdir))

    alttaki kisim ise dedigim gibi explicit bir interface metodu, sadece o interface turundeki degiskenler uzerinden erisilebiliyor bu metoda.



    < Bu mesaj bu kişi tarafından değiştirildi VatandA.Ş. -- 6 Temmuz 2017; 19:36:57 >




  • çok sağ ol ayrıntılı cevabın için, bir kaç kere okuyup özümsemem lazım dedikleri
  • deniz caliskan kullanıcısına yanıt
    rica ederim. tam anlayamadigin kisim olursa sormakta cekinme tam anlatamamis olabilirim.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.