Avviso "Utilizza la nuova parola chiave se lo desideri"


101

Ho un avviso nella parte inferiore dello schermo:

Avviso 1 "WindowsFormsApplication2.EventControlDataSet.Events" nasconde il membro ereditato "System.ComponentModel.MarshalByValueComponent.Events". Utilizzare la nuova parola chiave se si intende nascondere. C: \ Users \ mioComputer \ Desktop \ Event Control \ WindowsFormsApplication2 \ EventControlDataSet.Designer.cs 112 32 eventControl

Se faccio doppio clic su di esso, viene visualizzato:

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

Qualcuno può dirmi come sbarazzarsi di questo?

Risposte:


144

La tua classe ha una classe base e questa classe base ha anche una proprietà (che non è virtuale o astratta) chiamata Eventi che viene sovrascritta dalla tua classe. Se intendi sovrascriverlo, inserisci la parola chiave "new" dopo il modificatore public. PER ESEMPIO

public new EventsDataTable Events
{
  ..
}

Se non desideri sovrascriverlo, cambia il nome delle tue proprietà in qualcos'altro.


23
Ecco un collegamento per chiunque desideri sapere qual è la differenza tra new e override.
starsplusplus

La new parola chiave eliminerebbe l'errore di compilazione, ma potrebbe introdurre un altro comportamento indesiderato. Penso che dovresti aggiungere un avvertimento alla tua risposta. Sarebbe utile per comprendere le conseguenze dell'aggiunta new.
fino

13

@wdavo è corretto. Lo stesso vale anche per le funzioni.

Se sovrascrivi una funzione di base, come Update, nella tua sottoclasse avrai bisogno di:

new void Update()
{
  //do stufff
}

Senza il nuovo all'inizio della declinazione della funzione verrà visualizzato il flag di avviso.


6

Nel codice seguente, Class Aimplementa l'interfaccia IShowe implementa il suo metodo ShowData. Class Beredita Class A. Per utilizzare il ShowDatametodo in Class B, dobbiamo usare la parola chiave newnel ShowDatametodo per nascondere il Class Ametodo della classe base e usare la overrideparola chiave per estendere il metodo.

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
Non c'è overridenel tuo esempio dalla tua spiegazione e overridenon è necessario.
Etienne Faucher

Penso che il tuo esempio sia sulla strada giusta, ma è incompleto. Anche la tua spiegazione non è chiara. Potresti modificare la tua risposta in modo che sia qualcosa di più simile a dotnetfiddle.net/Iw0OzB ? In caso contrario, probabilmente
posterò il

0

La funzione genitore ha bisogno della virtualparola chiave e la funzione figlia ha bisogno della overrideparola chiave davanti alla definizione della funzione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.