有没有办法在没有声明c#中的类的情况下调用名称空间内的函数。
例如,如果我有两个完全相同的方法并且应该在我的所有C#项目中使用,那么有没有办法让这些函数成为一个dll而只是说'Using myTwoMethods'on顶部并开始使用方法而不声明类?
现在,我这样做: MyClass.MyMethod();
我想这样做: 的MyMethod();
谢谢, 罗希特夏尔
答案 0 :(得分:27)
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();
}
答案 1 :(得分:12)
您不能在类之外声明方法,但可以使用类库项目中的静态帮助程序类来执行此操作。
public static class HelperClass
{
public static void HelperMethod() {
// ...
}
}
用法(在添加对类库的引用之后)。
HelperClass.HelperMethod();
答案 2 :(得分:3)
根据建议使用扩展方法,您可以使该方法成为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)
)。
答案 3 :(得分:2)
取决于我们正在讨论什么类型的方法,您可以查看扩展方法:
http://msdn.microsoft.com/en-us/library/bb383977.aspx
这使您可以轻松地向现有对象添加额外功能。