2010-10-12 10 views
14

En C/C++, tengo un montón de funciones a las que llamo desde main(), y quiero reescribir esto en C#. ¿Puedo tener funciones independientes (métodos) o tengo que ponerlas en otra clase? Sé que puedo tener métodos dentro de la misma clase, pero quiero tener un archivo para cada función/método.¿Puede haber funciones independientes en C# sin una clase?

como no funciona:

using System.IO; 
using System; 


class Program 
{ 
    static void Main() 
    { 
House balls = new House(); 
balls.said(); 

    } 
} 
    public class House 
    { 
     public void said() 
     { 
      Console.Write("fatty"); 
      Console.ReadLine(); 

     } 
    } 

Pero luego tengo que crear una instancia de la casa y dicho llamada(), cuando en C acabo puede llamar a dicho().

+1

Puede utilizar los métodos estáticos, entonces no necesita crear una instancia – w69rdy

+3

Sugerencia: pensar en lo que está sucediendo en estas líneas de código: 'Console.Write (...); y' 'consola .ReadLine(); ' – Dinah

Respuesta

15

No. Hazlos static y colócalos en una clase de utilidad static si de hecho no encajan en ninguna de tus clases existentes.

1

Si declara su método como static (es decir: public static void said()), puede simplemente llamarlo con House.said(), que es lo más cerca que obtendrá en C#.

4

No existe un concepto de funciones independientes en C#. Todo es un objeto

Puede crear métodos estáticos en alguna clase de utilidad, y llamar a los que, sin crear una instancia de una clase por ejemplo

class Program 
{ 
    static void Main() 
    { 
    House.said(); 
    } 
} 

public class House 
    { 
     public static void said() 
     { 
      Console.Write("fatty"); 
      Console.ReadLine(); 

     } 
    } 
+0

¿Por qué el voto negativo? –

+0

jaja, no era yo. –

+0

ahora, quien responda "Fijo" sería atrapado en la votación abajo. ESPERE .. OH S ~~~. –

3

Aunque el concepto de funciones autónomas existe en .NET, C# no permite usted para especificar tales funciones. Debe pegarlos dentro de una clase estática Utils o similar.

1

Puede agregar todos sus métodos a la clase Program, pero esto se convertiría rápidamente en un desastre inmanejable, comúnmente conocido como God Class o Ball of Mud anti-pattern.

El mantenimiento de un solo archivo para cada función se convertiría de manera similar en un gran desastre. Las preguntas "¿Dónde pongo mis métodos?" Y "¿Qué clases debo crear?" Están respondidas por Design Patterns. Clases agregadas comportamiento (funciones) y deberían hacer una cosa (Responsabilidad única)

+1

sí, específicamente buscando evitar la Clase de Dios. –

+1

Crea clases para hacer cosas (actores, constructores) y llevar datos (objetos de transferencia de datos). No temas tener muchas clases, ya que esto (hasta cierto punto) es una indicación de buena separación de preocupaciones. Los proyectos de código abierto en C# son una buena fuente de orientación sobre cómo organizar clases y métodos. –

4

Debes ponerlas en una clase, pero la clase puede ser estática como las otras mencionaron. Si realmente quiere tener un archivo separado para cada método, se puede marcar la clase de parcial para obtener el siguiente:

Program.cs 
---------- 
class Program 
{ 
    static void Main() 
    { 
     House.said(); 
     House.saidAgain(); 
    } 
} 

House-said.cs 
------------- 
public static partial class House 
{ 
    public static void said() 
    { 
     Console.Write("fatty"); 
     Console.ReadLine(); 
    } 
} 

House-saidAgain.cs 
------------------ 
public static partial class House 
{ 
    public static void saidAgain() 
    { 
     Console.Write("fattyAgain"); 
     Console.ReadLine(); 
    } 
} 

No recomendaría la separación de cada uno, sin embargo. Las clases parciales se usan principalmente para que el código generado por el diseñador no sobrescriba ningún código personalizado en la misma clase. De lo contrario, puede terminar fácilmente con cientos de archivos y no es una forma fácil de pasar de un método a otro. Si cree que necesita una clase parcial porque la cantidad de métodos se está volviendo inmanejable, entonces probablemente necesite separar la lógica en otra clase.

0

Como referencia, deseo agregar la adición using static de C# 6 aquí.

Ahora puede usar métodos de una clase estática sin tener que escribir el nombre de esa clase una y otra vez. Un ejemplo a juego la pregunta sería:

House.cs

public static class House 
{ 
    public static void Said() 
    { 
     Console.Write("fatty"); 
     Console.ReadLine(); 
    } 
} 

Programa.cs

using static House; 

class Program 
{ 
    static void Main() 
    { 
     Said(); 
    } 
} 
Cuestiones relacionadas