84 votes

les noms des membres ne peuvent pas être identiques à ceux du type qui les englobe C#

Le code ci-dessous est en C# et j'utilise Visual Studio 2010.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;

namespace FrontEnd
{
    class Flow
    {
        long i;
        private int x,y;
        public int X
        {
            get;set;
        }
        public int Y
        {
            get;set;
        }

        private void Flow()
        {
            X = x;
            Y = y;
        }

        public void NaturalNumbers(int x, int y)
        {
            for (i = 0; i < 9999; i++)
            {
                Console.WriteLine(i);
            }
            MessageBox.Show("done");
        }
    }
}

Lorsque je compile le code ci-dessus, j'obtiens cette erreur :

Erreur : 'Flow' : les noms des membres ne peuvent pas être les mêmes que ceux du type qui les englobe.

Pourquoi ? Comment puis-je résoudre ce problème ?

130voto

mshsayem Points 5271

Les noms de méthodes qui sont identiques au nom de la classe sont appelés constructeurs . Les constructeurs n'ont pas de type de retour. Donc correct comme :

private Flow()
{
   X = x;
   Y = y;
}

Ou bien renommez la fonction comme :

private void DoFlow()
{
   X = x;
   Y = y;
}

Bien que l'ensemble du code n'ait aucun sens pour moi.

2 votes

Mais où est-ce que (les valeurs de) x y y viennent-ils de ?

2 votes

Notez que cette erreur peut également se produire si par erreur le nom de votre classe et le nom de votre xaml sont les mêmes. Cela m'est arrivé aujourd'hui.

28voto

Wouter de Kort Points 17184

Le problème se situe au niveau de la méthode :

private void Flow()
{
    X = x;
    Y = y;
}

Votre classe s'appelle Flow donc cette méthode ne peut pas aussi être nommée Flow . Vous devrez changer le nom de la Flow en quelque chose d'autre pour que ce code compile.

Ou voulez-vous créer un constructeur privé pour initialiser votre classe ? Si c'est le cas, vous devrez supprimer la balise void pour que le compilateur sache que vous déclarez un constructeur.

6voto

Qasim Khan Points 81

Les constructeurs ne renvoient pas de type, il suffit de supprimer le type de retour qui est void dans votre cas. Cela fonctionnera bien alors.

4voto

Kunj Sangani Points 41

Comme le constructeur doit se trouver au début de la classe, vous êtes confronté au problème ci-dessus. Donc, vous pouvez soit changer le nom ou si vous voulez l'utiliser comme constructeur, copiez simplement la méthode au début de la classe.

3voto

Hoby Points 3

Supprimez simplement ceci parce que le constructeur n'a pas de type de retour comme void. ce sera comme ceci :

private Flow()
    {
        X = x;
        Y = y;
    }

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