Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
14
Cevap
866
Tıklama
0
Öne Çıkarma
c# isim saklama(name hiding) sorusu
D
8 yıl
Yüzbaşı
Konu Sahibi

kitapta aşağıdaki kodda Y.A elemanın X.A elemanını gizlediğini dair uyarı vermesi gerektiği yazıyor ama ben aynı kodu yazmama rağmen bir hata almıyorum, yardım lütfen.
using System;

class X
{
protected int a;
public X(int a)
{
this.a = a;
}
public X()
{
}
public int A
{
get
{

Console.WriteLine("X sınıfı");
return a;
}
}
}
class Y : X
{
protected int b;

public Y(int a)
{
this.b = a;
}
public Y()
{

}
public int A
{
get
{
Console.WriteLine("Y sınıfı");
return b;

}
}
}
class Mainetot
{
static void Main(string[] args)
{
Y y = new Y(5);
int deneme = y.A;

}
}





< Bu mesaj bu kişi tarafından değiştirildi deniz caliskan -- 4 Temmuz 2017; 17:6:3 >

H
8 yıl
Yüzbaşı

A bir metot sanırım. Dolayısıyla tanımlarken ve kullanırken parametre parantezlerinin olması lazım. Parametresi olmadığı için parantezlerin içi boş olur.



İkiyerde tanım bir yerde kullanım var.

public int A()

{

}



int deneme = y.A();



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
D
8 yıl
Yüzbaşı
Konu Sahibi

onlar bir property metot ve ya fonksiyon değil üstat, c#' a ait güzel bir özellik bu :)


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @hyrgul
H
8 yıl
Yüzbaşı

Güzel özellikmiş. Öğrenmiş olduk.

Belki get içine sadece return yazılabiliyordur. Oradaki Console.WriteLine komutlarını silip deneyebilirsiniz.



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
D
8 yıl
Yüzbaşı
Konu Sahibi

dediğinide denedim hala uyarı vermiyor sıkıntı şu: kodun çalışması, kitapta ise bu kod için uyarı verir demesi, acaba ben visual studionun 2017'sini kullandığım için mi öyle oluyor (yeni bir özellik gelmiş olabilir) ? çünkü kitap bir eski versiyonundan anlatıyor yani c#6.0 ile anlatıyor ondan mı acaba diye düşünüyorum.




Bu mesajda bahsedilenler: @hyrgul
H
8 yıl
Yüzbaşı

Uyarı ya da hata mesajını yazar mısınız?



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
D
8 yıl
Yüzbaşı
Konu Sahibi

warning CS0108 : The keyword new is required on 'Y.A' because it hides inherited member 'X.A'




Bu mesajda bahsedilenler: @hyrgul
G
8 yıl
Yarbay

e veriyor ya uyarıyı yukarıda uyarının ingilizcesini yazmışsınız onun türkçesi bahsettiğiniz uyarıdır
ortada bir sorun yok ki
< Resime gitmek için tıklayın >


Bu mesaja 1 cevap geldi.
H
8 yıl
Yüzbaşı

Türetilen Y sınıfındaki aynı A ismindeki özelliğin önüne new ifadesi yazarak dener misiniz?



new public int A

{



}



Kaynak:

https://stackoverflow.com/questions/5933045/what-if-i-dont-heed-the-warning-hides-inherited-member-to-make-the-current-me



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
D
8 yıl
Yüzbaşı
Konu Sahibi

bende uyarı vermiyor :( direk çıktı olarak:

Y sınıfı
press any key...

çıktısını veriyor.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Gökşen PASLI
D
8 yıl
Yüzbaşı
Konu Sahibi

new koyunca bir şey değişmedi hala aynı çıktıyı alıyorum, zaten kitapta new koyulmmaış halini veriyor ve bunda uyarı alırsın diyor ama daha sonra önüne new koyarsan hata almassın diyor, ama bende new koyuncada koymayınca da uyarı falan vermeden direk çıktı gösteriyor
çıktı şu :

Y sınıfı
Press any ...




Bu mesajda bahsedilenler: @hyrgul
G
8 yıl
Yarbay

tamam zaten öyle olacak sen herhalde console da o uyarı çıkacak sanıyorsun öyle birşey yok o gösterdiğim ekranda çıkacak bilgi amaçlı uyarı o zaten


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @deniz caliskan
D
8 yıl
Yüzbaşı
Konu Sahibi

eyw




Bu mesajda bahsedilenler: @Gökşen PASLI
V
8 yıl
Binbaşı

hocam property'ler temelde fonksiyondur.

public int BirSayi { get; set; }
seklinde olanlara "auto-property" denir ozel adi yani. bu aslinda tamamen suna esittir:

private int birSayi; 
public int BirSayi
{
get { return birSayi; }
set { birSayi = value; }
}


(bu sekilde cok kullanildigi icin ustteki hali var. adindan anlasiliyor zaten "auto")
ki bu normal bir "property"dir ve get set ici istedigin gibi degistirilebilir.

ve bu propertyler de yine kisa yazilistir. karsiligi 2 metoddur ve bunlar arka planda su koda cevrilir:

private int birSayi; // bu normal bir field ozel bir yani yok. property ile birlikte kullanimda "backing field" olarak gecer bunlar. yani destekci alan. 

public int get_BirSayi()
{
return birSayi;
}

public void set_BirSayi(int value)
{
birSayi = value; // property'lerde "value" kelimesinin ozel olma nedeni bu metodda parametre olmasi.
}


bu kod otomatik olarak uretilir dedigim gibi. auto-property'ler icin ise backing field da otomatik uretilir. ve isimler tam olarak boyle degil, C# icinde illegal isim kullaniliyor IL (intermediate language. biraz ileri seviye bir konu arastirabilirsin) tarafindan.




Bu mesajda bahsedilenler: @hyrgul , @deniz caliskan
H
8 yıl
Yüzbaşı

Çok teşekkür ederim.



< Bu ileti mobil sürüm kullanılarak atıldı >

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.