3

可能重复:
为什么 C# 不允许像 C++ 这样的非成员函数

StaticClass.Function()我不想写,而是简单地写Function(). 将有许多功能,并且都应该可以从不同(且不相关)的类和文件中访问。如何将这些函数放在特定的命名空间中?简单地声明它会给我一个编译错误

error CS1518: Expected class, delegate, enum, interface, or struct

我知道其他 .NET 语言可以做到这一点。我可以使用编译选项吗?也许甚至没有证件?

4

3 回答 3

10

C# 不允许使用自由函数。每个函数都必须驻留在一个类型中。这就是它的工作方式,这不是技术可能性的问题,而是一个设计决定。

你可能对这篇文章感兴趣。


在旁注中,有没有注意到 Intellisense在编写 C# 时C++ 更好地工作?这是有帮助的事情之一(不是唯一的,而是一个)。

编辑:有趣的是,在阅读链接的文章时,我注意到这是一个重复...

于 2012-08-09T23:25:55.937 回答
2

C# 在设计上不允许这样做。

但是,如果您的目标仅仅是减少打字,那么您有几个选择。

首先,您可以使用using 指令来简化此操作。通过添加这个:

using SC = YourNamespace.StaticClass;

您可以将该特定文档中的调用缩短为:

SC.Function();

偶尔合适的另一个选项是使用 扩展方法。这可以消除指定类型的需要,因为该函数似乎是第一个参数的成员函数。当然,这不适用于提供的示例(因为它需要一个参数),但可能是减少键入和搜索量的另一种选择,具体取决于特定的用例。

于 2012-08-09T23:31:43.597 回答
-2

C# 是纯面向对象的,这意味着您不能在类之外拥有函数或声明。你必须使用静态来实现你想要的。

于 2012-08-09T23:27:38.953 回答