【问题标题】:Why do I need a wrapping class? c#为什么我需要一个包装类? C#
【发布时间】:2010-11-17 23:38:28
【问题描述】:

我有一个有一定长度的程序,有一个类和许多方法。所有这些都必须包含在一个巨大的类中,该类包含除了 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。

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

【问题讨论】:

  • 我在这里看到了几个不同的问题,无法在一个线程中完全回答。您应该考虑将它们分开。
  • 我同意 Rex 的观点,请清理并可能拆分您的问题。并且提供几行代码,比描述清楚多了。
  • 只是为了确保我理解这个问题:你问为什么文件中的所有代码都包含在一个类中?你不是指在一个班级里有一个班级,对吧?只是问为什么一个文件包含一个类?
  • 问。什么时候需要一个包装类? A. 当 Eminem 是你的老师时

标签: c# class word-wrap main


【解决方案1】:

Main 必须具有正确的签名才能被识别为程序启动方法。这意味着每个班级只能有 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】:

    在 C# 中它应该是 Main

    【讨论】:

      【解决方案3】:

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

      Eric Lippert 对 SO 问题 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)

      【讨论】:

        【解决方案4】:

        在我看来你正在使用一个类,而你应该使用 namespace

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2011-01-09
            • 1970-01-01
            • 1970-01-01
            • 2018-05-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多