0

我有一个一定长度的程序,有一个类和许多方法。所有这些都必须包含在一个巨大的类中,该类包含除了 using 语句之外的整个文件。那个巨大的包装类的必要性似乎毫无意义,这只是在以后制作具有多个文件的程序时才使用吗?

    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。

哦,对了,区分大小写。谢谢。但仍然 - >为什么我在不使用测试类时需要包装类?

4

5 回答 5

6

C# 中没有全局方法或变量。它们必须在类或结构等类型声明中。这也适用于 Main() 方法。

Eric Lippert对 SO 问题发表了一个很好的回答,为什么 C# 不允许像 C++ 这样的非成员函数,并在他的博客中进一步跟进:为什么 C# 不实现“顶级”方法?

您还可能会发现以下 MSDN 链接很有用:C++ 与 C# 之间的比较

Main() 方法是 C# 程序的入口点。程序中应该只有一个入口点,但程序中可以有多个包含 Main() 方法的类。但是,如果您有多个 Main 方法,则应通过使用编译器选项/main编译程序来指定将哪个 Main 方法用作入口点。

Main() 方法必须static且不应public符合MSDN。默认情况下,VS2008 创建一个 Main() 作为静态私有并且运行时可以毫无问题地调用它。您可以将其更改为public,它会编译得很好。但是,我认为这真的很尴尬,因为您不能阻止其他类调用 Main(),因为它是公共的。

有关 Main 方法的更多信息,您可以查看以下 MSDN 文章:Main() 和命令行参数(C# 编程指南)

于 2009-08-08T18:52:27.110 回答
1

Main 必须具有正确的签名才能被识别为程序启动方法。这意味着每个班级只能有 1 个。每个程序可以有超过 1 个,您可以在编译器命令行或 Project|Properties|Application 中选择应该提供 main 的类(查找组合框“启动对象”)。

那个大班听起来很奇怪,你能大致说明一下你的意思吗?一个猜测,你是不是很困惑classnamespace在这里?

添加

为了响应您的编辑,在 C# 中,包括 Main 在内的每个方法都必须在一个类中。看到这个帖子。根据定义,main 的签名是

public static void Main(string[] args) { }

尽管您可以省略 args 参数。在您的情况下,命令行将是:

csc /main:CollectKeywordsFromLogs  file.c

省略 /main 时有默认规则规则

于 2009-08-08T18:23:31.597 回答
1

在 C# 中,它应该是 Main <---capital M :D

于 2009-08-08T18:36:49.730 回答
1

在我看来,当您应该使用命名空间时,您正在使用一个类。

除此之外……在 C# 中,所有代码都必须在某种类中。为该Main()方法创建一个例外是愚蠢的。

顺便说一下,私人Main()实际上可以很好地作为程序入口点。

于 2009-08-08T18:53:25.080 回答
0

C#使用基于类的面向对象编程范式,全局变量属于过程编程等其他范式;在此处查看有关编程范例的文章。确实,一些面向对象的编程语言,尤其是 C++,支持全局变量,但不支持 C#(这是一个很好的 imo :o))。

于 2009-08-08T19:43:11.720 回答