题
我有一个长度的程序,具有课程和许多方法。所有这些都必须包含在一个巨大的类中,除了使用语句外,还必须包装整个文件。该巨大包装类的必要性似乎毫无意义,这仅在用多个文件制作程序时才会使用?
using System;
using System.IO;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using System.Linq;
public class CollectKeywordsFromLogs // why do I need this ( when it is the only class [as i just added the test class for the question])
{
//a class
//constructor
//methods
//methods
public static void Main() // and why would i need to explicitly declare this public? it works either way, and a private main would be useless no?
{}
}
这是我的完整文件。我编译csc file.cs然后file.exe。
哦,杜,案件敏感。谢谢。但是仍然 - >当NOTT使用测试类时,为什么我需要包装类?
解决方案
C#中没有全局方法或变量。它们必须在类型声明中,例如类或结构。这也适用于main()方法。
埃里克·利珀特(Eric Lippert) 在这样的问题上发布了一个很好的答案, 为什么C#不允许诸如C ++之类的非会员功能, ,进一步跟进 他的博客: C#为什么不实现“顶级”方法?
您还可能发现以下MSDN链接有用: C ++和C#的比较
主()方法是C#程序的入口点。程序中应该只有一个入口点,但是,可以有多个程序中包含一个程序中的main()方法。但是,如果您有多种主要方法,则应通过将程序编译给您的程序来指定哪种主要方法 编译器选项 /main
.
主()方法必须是 static
而且不应该 public
根据 MSDN. 。默认情况下,VS2008将Main()作为静态私有创建,并且运行时可以在没有任何问题的情况下调用它。您可以将其更改为 public
而且它会汇编正常。但是,我认为这确实很尴尬,因为您无法阻止其他类别呼叫Main(),因为它是公开的。
有关主要方法的更多信息,您可以看到以下MSDN文章: main()和命令行参数(C#编程指南)
其他提示
在C#中应该是主要的<---资本M:D
在我看来,当您应该使用一个时,您正在使用课 名称空间.
除此之外...在C#中,所有代码都必须在某种类中。例外是很愚蠢的 Main()
方法。
私人 Main()
顺便说一句,实际上可以作为程序切入点工作。
一个主必须具有正确的签名才能被识别为程序启动方法。这意味着您每堂课只能有1个。您可以每个程序有超过1个程序,可以选择应在编译器命令行或Project | properties |应用程序中提供主的类(查找ComboBox'startup Object')。
那个大阶级听起来很奇怪,您能显示您的意思的轮廓吗?一个猜测,你不是很困惑 class
和 namespace
这里?
添加
响应您的编辑,在C#中 每一个 包括主要的方法必须在课堂上。看 这个帖子. 。根据定义,主的签名是
public static void Main(string[] args) { }
尽管允许您省略ARGS参数。在您的情况下,命令行是:
csc /main:CollectKeywordsFromLogs file.c
删除 /main时有默认规则规则
C#使用基于类的对象的编程范例,全局变量属于其他范式,例如程序编程;看一看 这里 有关编程范式的文章。没错,某些面向对象的编程语言,尤其是C ++,支持全局变量,但不支持C#(这是一个很好的Thiing IMO:O))。