web-dev-qa-db-fra.com

Avertissement "Utilisez le nouveau mot clé si le masquage était destiné"

J'ai un avertissement au bas de mon écran:

Avertissement 1 'WindowsFormsApplication2.EventControlDataSet.Events' masque le membre hérité 'System.ComponentModel.MarshalByValueComponent.Events'. Utilisez le nouveau mot-clé si la cache était destinée. C:\Utilisateurs\monOrdinateur\Bureau\Contrôle Evénement\WindowsFormsApplication2\EventControlDataSet.Designer.cs 112 32 eventControl

Si je double-clique dessus, cela donne:

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

Quelqu'un peut-il me dire comment se débarrasser de cela?

88
tony b

Votre classe a une classe de base, et cette classe de base a également une propriété (qui n'est ni virtuelle ni abstraite) appelée Events, qui est remplacée par votre classe. Si vous souhaitez le remplacer, placez le mot-clé "nouveau" après le modificateur public. PAR EXEMPLE.

public new EventsDataTable Events
{
  ..
}

Si vous ne souhaitez pas le remplacer, changez le nom de vos propriétés.

126
wdavo

@wdavo est correct. Il en va de même pour les fonctions.

Si vous remplacez une fonction de base, telle que Update, dans votre sous-classe, vous avez besoin des éléments suivants:

new void Update()
{
  //do stufff
}

Sans le nouveau au début de la décélération de fonction, vous obtiendrez l'indicateur d'avertissement.

13
Aggressor

Dans le code ci-dessous, Class A implémente l'interface IShow et sa méthode ShowData. Class B _ hérite de Class A. Pour utiliser la méthode ShowData dans Class B, nous devons utiliser le mot clé new dans la méthode ShowData pour masquer la classe de base Class A méthode et utilisez le mot clé override pour étendre la méthode.

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");
    }
}
5
Joee