2010-05-27 12 views
6

Sanal yöntemleri içeren başka bir sınıfı (Sınıf A) alan bir sınıfım var (Sınıf B).Belirsiz bir sanal yöntem olduğunda bu C# kodu neden iyi derleniyor?

sınıfı

public class ClassA{ 
    public virtual void TestMethod(){ 
    } 
} 

B sınıfı

public class ClassB : ClassA{ 
    public void TestMethod(){ 
    } 
} 
Sınıf B'de bir (sözde üzere) geçersiz kılma yöntemi bildirirken

yanlışlıkla, I override anahtar kelimeyi ihmal

Kod sorunsuz bir şekilde derlenmiştir. Nedenini açıklayan var mı?

+1

Uyarılar açık mı? – zildjohn01

+0

Uyarılar kapatıldı - şimdi tekrar açın :) – Jimbo

cevap

7

Belirsiz değil. "Yeni" veya "geçersiz kılma" belirtmeniz ve varsayılan değerin "yeni" olması gerektiğini bildiren bir uyarı ile derlemelidir.

Bu kodu derlemeye çalıştığımda kesinlikle bir uyarı verir - "iyi" ve "sorunsuz bir şekilde" derlediğinde, uyarıları dikkate almıyor musunuz?

+0

Gerçekten de uyarılmamış uyarılarım var - bunun için teşekkürler, uyarıları tekrar göndereceğim. – Jimbo

+0

Bu durumda 'new' yönteminin kapsamı nedir? Eğer geçersiz kılma aslında eski yöntemi iptal ederse, o zaman “yeni” bu yöntem için bir erişim seviyesi yaratmalıdır? – Jimbo

+0

@Jimbo: Burada gerçekten hangi terminolojiyi kullandığınızdan emin değilim - "iptal" ve "erişim düzeyi" burada gerçekten geçerli değildir. Ama temelde 'TestMethod' bir derleme zamanı türü olan "ClassA" ile bir başvuruda çağırırsanız, özgün yöntemi çağırır ve derleme zamanı türü olan "ClassB" kullanırsanız, türetilmiş sınıfı kullanır. yöntem. –

0

B sınıfı

public class ClassB : ClassA{ 
    public override void TestMethod(){ 
    } 
} 

olmalıdır ancak geçersiz kılma olmadan derlemek olabilir - o düşünülmüştü eğer yeni anahtar kelimeyi

public class ClassB : ClassA{ 
    public new void TestMethod(){ 
    } 
} 

ödeme this eklemem gerekiyor belirten bir uyarı oluştursun Daha fazla bilgi

+1

-1: İstediğini değil –

+0

üzgünüm - cevabı bir dakika içerisinde düzenleyeceğim –

1

C# derleyici bir uyarı oluşturur. Her zaman 'hata olarak uyarılar' derlemenizi tavsiye ederim.

İlgili konular