119 votes

Utilisez le nouveau mot-clé si la dissimulation était prévue" avertissement

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

Avertissement 1 'WindowsFormsApplication2.EventControlDataSet.Events' masque le membre hérité 'System.ComponentModel.MarshalByValueComponent.Events'. Utilisez le nouveau mot-clé si le masquage était voulu. C:\Users\myComputer\Desktop\Event Control\WindowsFormsApplication2\EventControlDataSet.Designer.cs 112 32 eventControl

Si je double-clique dessus, cela affiche :

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

Quelqu'un peut-il me dire comment m'en débarrasser?

168voto

wdavo Points 2614

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 Événements qui est remplacée par votre classe. Si vous avez l'intention de la remplacer, ajoutez le mot-clé "new" après le modificateur public. Par exemple :

public new EventsDataTable Events
{
  ..
}

Si vous ne souhaitez pas la remplacer, changez le nom de vos propriétés pour quelque chose d'autre.

13voto

Aggressor Points 7311

@wdavo a raison. Il en va de même pour les fonctions.

Si vous remplacez une fonction de base, comme Update, alors dans votre sous-classe vous avez besoin :

new void Update()
{
  //faire des trucs
}

Sans le new au début de la déclaration de la fonction, vous obtiendrez le drapeau d'avertissement.

10voto

Joee Points 353

Dans le code ci-dessous, Class A implémente l'interface IShow et implémente 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 afin de masquer la méthode de la classe de base Class A et utiliser le mot-clé override pour étendre la méthode.

interface IShow
{
    protected void ShowData();
}

class A : IShow
{
    protected void ShowData()
    {
        Console.WriteLine("Ceci est la Classe A");
    }
}

class B : A
{
    protected new void ShowData()
    {
        Console.WriteLine("Ceci est la Classe B");
    }
}

2voto

James L. Points 2741

La fonction parent nécessite le mot-clé virtual, et la fonction enfant nécessite le mot-clé override devant la définition de la fonction.

1voto

SUB-HDR Points 407

Cet avertissement se déclenche également lorsque vous avez :
x:Name="Name1" avec Text="{Binding Name1}" le même nom de propriété dans le même élément de votre
ce qui peut causer un conflit sérieux à un certain point lorsque votre processus de liaison devient plus complexe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X