Bildirim
C# interface hakkında sorularım : (sorular resmin içinde)
Daha Fazla
Bu Konudaki Kullanıcılar:
Daha Az
2 Misafir - 2 Masaüstü
Giriş
Mesaj
-
-
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 -
rica ederim. tam anlayamadigin kisim olursa sormakta cekinme tam anlatamamis olabilirim.
Sayfa:
1
Ip işlemleri
Bu mesaj IP'si ile atılan mesajları ara Bu kullanıcının son IP'si ile atılan mesajları ara Bu mesaj IP'si ile kullanıcı ara Bu kullanıcının son IP'si ile kullanıcı ara
KAPAT X
Bu mesaj IP'si ile atılan mesajları ara Bu kullanıcının son IP'si ile atılan mesajları ara Bu mesaj IP'si ile kullanıcı ara Bu kullanıcının son IP'si ile kullanıcı ara
KAPAT X