2012-05-12 8 views
7

C'è un modo per chiamare una funzione che si trova all'interno di uno spazio dei nomi senza dichiarare la classe all'interno di C#.Metodi all'interno del namespace C#

Ad esempio, se avessi 2 metodi che sono esattamente uguali e dovrebbero essere usati in tutti i miei progetti C#, c'è un modo per prendere semplicemente quelle funzioni e trasformarle in una DLL e dire semplicemente "Uso di myTwoMethods" in cima e iniziare a usare i metodi senza dichiarare la classe?

In questo momento, io faccio: MyClass.MyMethod();

Voglio fare: MyMethod();

Grazie, Rohit

risposta

10

Non è possibile dichiarare metodi al di fuori di una classe, ma è possibile farlo utilizzando una classe helper statica in un progetto di libreria di classi.

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

Utilizzo (dopo aver aggiunto un riferimento alla libreria di classi).

HelperClass.HelperMethod(); 
+0

C'è un modo per chiamare "HelperMethod()" senza il helperclass? – rkrishnan2012

+1

Non c'è. I metodi devono essere contenuti all'interno di una classe o di una struttura. –

4

Dopo il suggerimento di utilizzare metodi di estensione, si potrebbe fare il metodo di un metodo di estensione off di System.Object, da cui derivano tutte le classi. Non lo difenderei, ma per quanto riguarda la tua domanda questa potrebbe essere una risposta.

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

Si può ora scrivere codice come MyMethod(); ovunque ci sia un using SomeNamespace;, a meno che non ci si trova in un metodo statico (allora si dovrebbe fare Extensions.MyMethod(null)).

+0

Non riesco ad accedere a MyMethod senza chiamare 'Extensions.MyMethod()' nel mio Form_load di un'altra classe. Grazie comunque. – rkrishnan2012

+0

Questo mi è sembrato molto interessante fino a quando mi sono ricordato che la funzione principale in C# è necessaria per essere statica. –

20

Aggiornamento 2015: No, non è possibile creare "funzioni gratuite" in C#, ma a partire da C# 6 sarà possibile chiamare le funzioni statiche senza menzionare il nome della classe. C# 6 will have the "using static" feature permettendo questa sintassi:

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

SomeOtherFile.cs:

using static MyClass; 

void SomeMethod() { 
    MyMethod(); 
}