2012-04-09 8 views
58

El código siguiente es en C# y estoy usando Visual Studio 2010.nombres de los miembros no pueden ser el mismo que su tipo envolvente C#

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 puedo compilar el código anterior me sale este error:

Error: 'Flow': member names cannot be the same as their enclosing type

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

Respuesta

97

Los nombres de métodos que son iguales que el nombre de clase se llaman constructores. Los constructores no tienen un tipo de devolución. Tan correcto como:

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

O cambiar el nombre de la función como:

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

A pesar de todo el código no tiene ningún sentido para mí.

+1

Pero, ¿de dónde vienen (los valores de) 'x' y' y'? –

+5

variables privadas; No tiene sentido, aunque ... – mshsayem

21

El problema es con el método:

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

Su clase se llama Flow por lo que este método no puede también ser nombrado Flow. Tendrá que cambiar el nombre del método Flow a otra cosa para hacer que este código se compile.

¿O quisiste crear un constructor privado para inicializar tu clase? Si ese es el caso, deberá eliminar la palabra clave void para que el compilador sepa que usted está declarando un constructor.

2

Un constructor no debería tener un tipo de devolución. eliminar el vacío 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 crea un objeto con la clase. por ejemplo, en su programa si realizó dos objetos de flujo, flujo de flujo1 = flujo nuevo(); Flujo de flujo2 = flujo nuevo(); luego el constructor de Flow se llamará 2 veces.

d. Si desea llamar al constructor por una vez, entonces declare que está estático (constructor estático) y no olvide eliminar cualquier modificador de acceso del constructor estático.

2

simplemente elimine esto porque el constructor no tiene un tipo de retorno como vacío que será como esta:

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

constructores no devuelven un tipo, basta con retirar el tipo de retorno que está vacío en su caso. Correría bien entonces.

2

Como Constructor debería estar al inicio de la clase, se enfrenta al problema anterior. Entonces, puedes cambiar el nombre o si quieres usarlo como constructor simplemente copia el método al comienzo de la clase.

Cuestiones relacionadas