2012-05-12 4 views
7

Есть ли способ вызвать функцию, которая находится внутри пространства имен без объявления класса внутри C#.Методы внутри пространства имен C#

Например, если у меня было два метода, которые являются одинаковыми и должны использоваться во всех моих проектах C#, есть ли способ просто взять эти функции и сделать их в dll и просто сказать «Использование myTwoMethods», сверху и начать использовать методы без объявления класса?

Прямо сейчас, у меня: MyClass.MyMethod();

Я хочу заняться: MyMethod();

Спасибо, Рохит

ответ

10

Вы не можете объявлять методы вне класса, но вы можете сделать это, используя статический вспомогательный класс в проекте библиотеки классов.

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

Использование (после добавления ссылки на вашу библиотеку классов).

HelperClass.HelperMethod(); 
+0

Есть ли способ вызова "HelperMethod()" без вспомогательного класса? – rkrishnan2012

+1

Нет. Методы должны содержаться внутри класса или структуры. –

2

Зависит от того, какого типа метода мы говорим, вы можете взглянуть на методы расширения:

http://msdn.microsoft.com/en-us/library/bb383977.aspx

Это позволяет легко добавлять дополнительные функции к существующим объектам.

4

Вслед за предложением использовать методы расширения, вы могли бы сделать метод метод расширения прочь System.Object, из которого все классы происходят. Я бы не стал защищать это, но в отношении вашего вопроса это может быть ответом.

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

Теперь Вы можете написать код MyMethod(); где-нибудь у вас есть using SomeNamespace;, если вы не в статическом методе (тогда вы должны сделать Extensions.MyMethod(null)).

+0

Я не могу получить доступ к MyMethod без вызова 'Extensions.MyMethod()' внутри моей Form_load другого класса. Спасибо, в любом случае. – rkrishnan2012

+0

Мне показалось, что это здорово, пока я не вспомнил, что основная функция в C# должна быть статичной. –

20

Обновление для 2015: Нет, вы не можете создавать «свободные функции» на C#, но, начиная с C# 6, вы сможете вызвать статические функции без упоминания имени класса. C# 6 will have the "using static" feature позволяет этот синтаксис:

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

SomeOtherFile.cs:

using static MyClass; 

void SomeMethod() { 
    MyMethod(); 
}