Konuyu Oyla:
  • Derecelendirme: 4.5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Create isimli constructor oluşturunca alınan uyarı
#1
Merhaba,

Bir diğer 10 puanlık Beyin Fırtınası Sorusu ile karşınızdayız.

Bir FMX projesindeki TForm için ek birkaç olaya hizmet etmesi maksadıyla overload yapılarak oluşturulan Create isimli Constructor, projeyi compile edince bir warning oluşturuyor. Bu warning'in sebebini, oluşturabileceği sorunları ve en pratik çözümünü veren kişiye +10 puan verilecektir.

Base sınıfın metodları ile ilgili bilgileri kapsamlı yazınız.

Örnek çıktı:

[dcc32 Warning] NewUnit.pas(123): W1010 Method 'Create' hides virtual method of base type 'TCustomForm'
Cevapla
#2
Soruyu daha açık yazarmısın.
overload yatığın yer neresi eklediğin kodlar ne
Cevapla
#3
(26-08-2017, Saat: 12:49)SecondLife Adlı Kullanıcıdan Alıntı: Soruyu daha açık yazar mısınız?
Overload yaptığınız yer neresidir? Eklediğiniz kodlar nelerdir?

Merhaba,

Kod bloğunda herhangi bir ek kod olmasının soru ile doğrudan organik bir bağı yok. Soru, yapıcı metodun (constructor) Delphi'de yer alan varsayılan metod ismi ile aynı olması durumunda projeyi derlediğinizde oluşan uyarı (warning), bu uyarının nedenleri, en kısa çözümleri, çözülmediğinde oluşabilecek sorunları, ana (base) sınıftaki sanal (virtual) metodları, yapıları ve eklenmeyen bağlantıları olması yada olmaması durumunda neler olacağına dair.

Kod şu şekilde özetlenebilir;

constructor TNewForm.Create(AComponent: TComponent);
begin
 inherited Create(AComponent);
end;
Cevapla
#4
(26-08-2017, Saat: 13:36)Abdullah Ilgaz Adlı Kullanıcıdan Alıntı:
(26-08-2017, Saat: 12:49)SecondLife Adlı Kullanıcıdan Alıntı: Soruyu daha açık yazar mısınız?
Overload yaptığınız yer neresidir? Eklediğiniz kodlar nelerdir?

Merhaba,

Kod bloğunda herhangi bir ek kod olmasının soru ile doğrudan organik bir bağı yok. Soru, yapıcı metodun (constructor) Delphi'de yer alan varsayılan metod ismi ile aynı olması durumunda projeyi derlediğinizde oluşan uyarı (warning), bu uyarının nedenleri, en kısa çözümleri, çözülmediğinde oluşabilecek sorunları, ana (base) sınıftaki sanal (virtual) metodları, yapıları ve eklenmeyen bağlantıları olması yada olmaması durumunda neler olacağına dair.

Kod şu şekilde özetlenebilir;

constructor TNewForm.Create(AComponent: TComponent);
begin
 inherited Create(AComponent);
end;

Olay sadece constructor ile sınırlı kalan bir olay değil. Tüm virtual metodları ilgilendiren bir olay.

Kısaca şöyle ifade etmek istiyorum:

W1010 oluşmasının sebebi ata sınıftaki ilgili metodun, genel olarak, override edilmemesidir. Derleyici de override edilmemiş aynı isimdeki bu metodla alakalı derleme işlemlerinde, kullanıcı bu metodu kullanmak istemiştir düşüncesiyle call emirlerini en dipteki sınıfın metodu olacak şekilde düzenler. Ama bir de uyarı verir: arkadaş, sen bu metodu yazdın ama, bak ata sınıftakini gizlemiş oldun haa. Eğer bu metod hiç olmasaydı zaten miras hiyerarşisinden ilgili erişim sağlanacaktı. Ama metod var. Ama override edilmedi. Hmm.. Demekki kullanıcı özellikle böyle tanımlıyor. Yalnız gene de hata yapmış olabilir. Uyaralım...

Çözüm mü?

1- reintroduce etiketini vermelisiniz. Böylece derleyiciye gerçekten anı isimde yeni bir metod hazırlamış olduğunuzu bildirirsiniz. (reintroduce = yeniden sun/tanıt)
2- override etiketini vermelisiniz. Bunu anlatmaya gerek yok sanırım.
Me on the move..
WWW
Cevapla




Konuyu Okuyanlar: 1 Ziyaretçi