2012-05-12 23 views
7

Gibt es eine Möglichkeit, eine Funktion innerhalb eines Namespace aufzurufen, ohne die Klasse in C# zu deklarieren.Methoden in Namespace C#

Zum Beispiel, wenn ich 2 Methoden hätte, die exakt gleich sind und in allen meinen C# -Projekten verwendet werden sollten, gibt es eine Möglichkeit, diese Funktionen einfach in eine DLL zu übernehmen und einfach 'myTwoMethods' zu sagen oben und starten Sie mit den Methoden, ohne die Klasse zu deklarieren?

Im Moment mache ich: MyClass.MyMethod();

Ich möchte tun: MyMethod();

Danke, Rohit

Antwort

10

Sie können Methoden nicht außerhalb einer Klasse deklarieren, aber Sie können dies mithilfe einer statischen Hilfsklasse in einem Klassenbibliotheksprojekt tun.

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

Verbrauch (nach einem Verweise auf Ihre Klassenbibliothek hinzufügen).

+0

Gibt es eine Möglichkeit "HelperMethod()" ohne die helperClass zu nennen? – rkrishnan2012

+1

Gibt es nicht. Methoden müssen in einer Klasse oder Struktur enthalten sein. –

4

Im Anschluss an den Vorschlag, Erweiterungsmethoden zu verwenden, könnten Sie die Methode zu einer Erweiterungsmethode von System.Object machen, von der alle Klassen abgeleitet werden. Ich würde dies nicht befürworten, aber in Bezug auf Ihre Frage könnte dies eine Antwort sein.

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

Sie jetzt Code wie MyMethod(); überall schreiben könnten Sie eine using SomeNamespace; haben, es sei denn, Sie in einer statischen Methode sind (dann würden Sie haben Extensions.MyMethod(null) zu tun).

+0

Ich kann nicht auf MyMethod zugreifen, ohne "Extensions.MyMethod()" in meinem Form_load einer anderen Klasse aufzurufen. Danke trotzdem. – rkrishnan2012

+0

Das schien wirklich cool zu sein, bis ich mich daran erinnerte, dass die Main-Funktion in C# statisch sein muss. –

20

Update für 2015: Nein, Sie können keine "freien Funktionen" in C# erstellen, aber beginnend mit C# 6 können Sie statische Funktionen aufrufen, ohne den Klassennamen zu nennen. C# 6 will have the "using static" feature so dass diese Syntax:

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

SomeOtherFile.cs:

using static MyClass; 

void SomeMethod() { 
    MyMethod(); 
}