为什么我需要一个包装类? C#

时间:2009-08-08 18:18:01

标签: c# class wrapping main

我有一个长度很长的程序,有一个类和很多方法。除了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。

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

5 个答案:

答案 0 :(得分:6)

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

Eric Lippert在问题Why C# is not allowing non-member functions like C++上发布了一个很好的答案,并在his blog进一步跟进:Why Doesn't C# Implement "Top Level" Methods?

您还可以找到以下MSDN链接:Comparison Between C++ and C#

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

根据MSDN,Main()方法必须为static,不应为public。默认情况下,VS2008将Main()创建为静态私有,运行时可以毫无问题地调用它。您可以将其更改为public,它将正常编译。但是,我认为这是非常尴尬的,因为你不能阻止其他类调用Main(),因为它是公共的。

有关Main方法的详细信息,请参阅以下MSDN文章:Main() and Command-Line Arguments (C# Programming Guide)

答案 1 :(得分:1)

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

那个大班听起来很奇怪,你能说出你的意思吗?一个猜测,你不是在混淆classnamespace吗?

添加

在回复您的编辑时,在C#每个方法(包括Main)中,必须在一个类中。见this post。根据定义,main的签名是

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

虽然您可以省略args参数。您的案例中的命令行将是:

csc /main:CollectKeywordsFromLogs  file.c

当您退出/ main

时,有默认的规则规则

答案 2 :(得分:1)

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

答案 3 :(得分:1)

在我看来,当你应该使用namespace时,你正在使用课程。

除此之外......在C#中,所有代码都必须在某种类中。为Main()方法制作例外是愚蠢的。

顺便说一下,私有Main()实际上可以作为程序入口点工作。

答案 4 :(得分:0)

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