我想写StaticClass.Function()
而不是写Function()
。将有许多功能,所有功能都应该可以从不同的(和不相关的)类和文件访问。如何将这些函数放在特定的命名空间中?简单地声明它会给我一个编译错误
error CS1518: Expected class, delegate, enum, interface, or struct
我知道其他.NET语言可以做到这一点。我可以使用编译选项吗?也许甚至没有记载?
答案 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#纯粹是面向对象的,这意味着你不能在类之外拥有函数或声明。你必须使用静态来达到你想要的效果。