los nombres de los miembros no pueden ser los mismos que su tipo C # adjunto

81

El siguiente código está en C # y estoy usando 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");
        }
    }
}

Cuando compilo el código anterior, aparece este error:

Error: 'Flujo': los nombres de los miembros no pueden ser los mismos que su tipo adjunto

¿Por qué? ¿Cómo puedo resolver esto?

SHRI
fuente

Respuestas:

127

Los nombres de métodos que son iguales al nombre de la clase se denominan constructores . Los constructores no tienen un tipo de retorno. Tan correcto como:

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

O cambie el nombre de la función como:

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

Aunque todo el código no tiene ningún sentido para mí.

mshsayem
fuente
2
Pero, ¿de dónde vienen (los valores de) xy de dónde yvienen?
Henk Holterman
2
Tenga en cuenta que este error también puede ocurrir si por error su nombre de clase y su nombre xaml son iguales. Me pasó hoy.
NewBie1234
27

El problema está en el método:

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

Su clase tiene un nombre, Flowpor lo que este método no puede ser nombrado también Flow. Tendrá que cambiar el nombre del Flowmétodo por otro para hacer que este código se compile.

¿O pretendías crear un constructor privado para inicializar tu clase? Si ese es el caso, tendrá que eliminar la voidpalabra clave para que el compilador sepa que está declarando un constructor.

Wouter de Kort
fuente
6

Los constructores no devuelven un tipo, simplemente eliminan el tipo de retorno que es nulo en su caso. Entonces funcionaría bien.

Qasim Khan
fuente
4

Como Constructor debería estar al comienzo de la Clase, se enfrenta al problema anterior. Por lo tanto, puede cambiar el nombre o, si desea usarlo como constructor, simplemente copie el método al comienzo de la clase.

Kunj Sangani
fuente
3

simplemente elimine esto porque el constructor no tiene un tipo de retorno como void, será así:

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

Un constructor no debería tener un tipo de retorno. eliminar void antes de cada constructor.

Alguna característica muy básica de un constructor:

a. Mismo nombre que la clase b. sin tipo de devolución. C. se llamará cada vez que se cree un objeto con la clase. por ejemplo, en su programa si u hizo dos objetos de Flow, Flow flow1 = new Flow (); Flujo flujo2 = nuevo flujo (); entonces se llamará al constructor Flow 2 veces.

re. Si desea llamar al constructor solo por una vez, declare eso como estático (constructor estático) y no olvide eliminar cualquier modificador de acceso del constructor estático.

Subhranshu
fuente