"Gizlenmek isteniyorsa yeni anahtar kelimeyi kullanın" uyarısı


101

Ekranımın altında bir uyarı var:

Uyarı 1 'WindowsFormsApplication2.EventControlDataSet.Events', miras alınan 'System.ComponentModel.MarshalByValueComponent.Events' üyesini gizler. Gizleme amaçlanıyorsa yeni anahtar kelimeyi kullanın. C: \ Users \ myComputer \ Desktop \ Event Control \ WindowsFormsApplication2 \ EventControlDataSet.Designer.cs 112 32 eventControl

Üzerine çift tıklarsam, şu çıkar:

public EventsDataTable Events {
    get {
        return this.tableEvents;
    }

Biri bana bundan nasıl kurtulacağımı söyleyebilir mi?

Yanıtlar:


145

Sınıfınızın bir temel sınıfı vardır ve bu temel sınıfın, sınıfınız tarafından geçersiz kılınan Olaylar adlı bir özelliği (sanal veya soyut değildir) vardır. Eğer geçersiz kılmayı düşünüyorsanız, "new" anahtar sözcüğünü public değiştiriciden sonra koyun. ÖRNEĞİN

public new EventsDataTable Events
{
  ..
}

Bunu geçersiz kılmak istemiyorsanız, mülklerinizin adını başka bir şeyle değiştirin.


23
İşte yeni ile geçersiz kılma arasındaki farkın ne olduğunu bilmek isteyen herkes için bir bağlantı .
starsplusplus

new Anahtar kelime derleme hatası kurtulmak, ancak diğer istenmeyen davranışı taşıyabilirler. Cevabınıza bir uyarı eklemeniz gerektiğini düşünüyorum. Bu, eklemenin sonuçlarını anlamak için yardımcı olacaktır new.
ahong

13

@wdavo doğru. Aynı şey işlevler için de geçerlidir.

Güncelleme gibi temel bir işlevi geçersiz kılarsanız, alt sınıfınızda şunlara ihtiyacınız vardır:

new void Update()
{
  //do stufff
}

İşlev açıklamasının başlangıcında yeni olmadan, uyarı bayrağını alacaksınız.


6

Aşağıdaki kodda Class Aarayüzü IShowuygular ve yöntemini uygular ShowData. Class Bmiras alır Class A. Kullanım için ShowDatade yöntemin Class B, biz anahtar kelime kullanmak zorunda newiçinde ShowDatatemel sınıf gizlemek amacıyla yönteme Class Ayöntemi ve kullanımı overrideyöntemi uzatmak için anahtar kelime.

interface IShow
{
    protected void ShowData();
}

class A : IShow
{
    protected void ShowData()
    {
        Console.WriteLine("This is Class A");
    }
}

class B : A
{
    protected new void ShowData()
    {
        Console.WriteLine("This is Class B");
    }
}

3
overrideÖrneğinizde açıklamanızdan hiçbir şey yok ve overridegerekli değil.
Etienne Faucher

Örneğinizin doğru yolda olduğunu düşünüyorum, ancak eksik. Ayrıca açıklamanız net değil. Cevabınızı daha çok dotnetfiddle.net/Iw0OzB gibi bir şey olacak şekilde düzenleyebilir misiniz ? Değilse muhtemelen başka bir cevap olarak
kemanımı yayınlayacağım

0

Ana işlevin virtualanahtar sözcüğe ihtiyacı vardır ve çocuk işlevin overrideişlev tanımının önünde anahtar sözcüğe ihtiyacı vardır .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.