命名空间中的函数?

时间:2012-08-09 23:23:43

标签: c# function namespaces

  

可能重复:
  Why C# is not allowing non-member functions like C++

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

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

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

3 个答案:

答案 0 :(得分:8)

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

您可能对this article感兴趣。


另一方面,在编写C#而不是C ++时,会注意到Intellisense如何工作得更好,更多更好?这是有帮助的事情之一(不是唯一的,而是一个)。

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

答案 1 :(得分:2)

C#不允许这样做by design

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

首先,您可以使用using Directive来简化此操作。加上这个:

using SC = YourNamespace.StaticClass;

您可以将该特定文档中的来电缩短为:

SC.Function();

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

答案 2 :(得分:-2)

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