2012-05-12 18 views
7

¿Hay alguna manera de llamar a una función que está dentro de un espacio de nombres sin declarar la clase dentro de C#.Métodos dentro del espacio de nombres C#

Por ejemplo, si tuviera 2 métodos que son exactamente iguales y deberían usarse en todos mis proyectos de C#, ¿hay alguna manera de simplemente tomar esas funciones y convertirlas en dll y simplemente decir 'Using myTwoMethods' en la parte superior y comienza a usar los métodos sin declarar la clase?

Ahora, lo hago: MyClass.MyMethod();

Quiero hacer: MyMethod();

Gracias, Rohit

Respuesta

10

No puede declarar métodos fuera de una clase, pero puede hacerlo utilizando una clase auxiliar estática en un proyecto de biblioteca de clases.

public static class HelperClass 
{ 
    public static void HelperMethod() { 
     // ... 
    } 
} 

Uso (después de agregar una referencia a su biblioteca de clases).

HelperClass.HelperMethod(); 
+0

¿Hay una manera de llamar "HelperMethod()" sin la helperclass? – rkrishnan2012

+1

No hay. Los métodos deben estar contenidos dentro de una clase o estructura. –

4

A raíz de la sugerencia de utilizar métodos de extensión, que podría hacer que el método un método de extensión fuera de System.Object, de la que derivan todas las clases. No recomendaría esto, pero en relación con su pregunta, esta podría ser una respuesta.

namespace SomeNamespace 
{ 
    public static class Extensions 
    { 
     public static void MyMethod(this System.Object o) 
     { 
     // Do something here. 
     } 
    } 
} 

Ahora podría escribir código como MyMethod(); cualquier lugar que tenga una using SomeNamespace;, a menos que esté en un método estático (entonces tendría que hacer Extensions.MyMethod(null)).

+0

No puedo acceder a MyMethod sin llamar a 'Extensions.MyMethod()' dentro de mi Form_load de otra clase. Gracias de cualquier manera. – rkrishnan2012

+0

Esto parecía realmente genial hasta que recordé que se requiere que la función Principal en C# sea estática. –

20

Actualización para 2015: No, no puede crear "funciones gratuitas" en C#, pero a partir de C# 6 podrá llamar a funciones estáticas sin mencionar el nombre de clase. C# 6 will have the "using static" feature permitiendo esta sintaxis:

static class MyClass { 
    public static void MyMethod(); 
} 

SomeOtherFile.cs:

using static MyClass; 

void SomeMethod() { 
    MyMethod(); 
} 
Cuestiones relacionadas