在C#中,将方法封装在类中的目的是什么?

3

我是C#的新手。为什么要将main()方法放在“类”中呢?这个“所谓”的类不会创建任何对象。我不知道为什么他们把整个程序看作类和方法。还有,为什么main()函数被称为方法?显然它在类中,但我总是把它称为函数,就像这样:

using System;
public class MyApp // What is the purpose of this class?
{
  public static void main() // Why is this called a method & not a function when no objects use it?
  {
    //Statements Here
  }
}

1
从技术上讲,函数是返回值的东西。在过程式编程的上下文中,这个意义有点松散,一个函数可以具有副作用而不实际产生任何值(这可能是对该术语的滥用)。术语“方法”的含义是中性的,因此您应该将其称为方法或过程(没有返回值的方法),而不是函数。 - Dan Bryant
4个回答

10
在C#中,没有纯粹的(裸露的)函数;所有可执行代码都存在于类的上下文中。类的可执行成员(函数)被称为方法。这就是语言定义的方式。
这在面向对象编程中现在已经很常见了;您可能需要更多地进行调研。

我稍微研究了一下Objective-C,但我并没有遇到将main()方法放在类中的想法。我有点困惑这个类的目的是什么。不会为这个类创建任何实例。你能进一步解释一下这个没有实例的类的目的吗? - Ben Reed
2
一个有趣的侧面是,这不是 .NET 的限制。CLR 允许您在程序集模块的上下文中定义“全局方法”。我猜这主要是为了与 VB 兼容。对于 C#,他们选择消除了这种额外的方法定义范围。您仍然可以使用 global:: 从 C# 访问此范围。 - Dan Bryant
@ispeakcode,静态类旨在将相关方法在特定命名空间中进行概念化分组,例如“Math”静态类。另一种选择是在命名空间范围内拥有“静态”函数,但这可能会导致在开始使用命名空间时污染活动范围,因为会有数百个实用函数。 - Dan Bryant
@Dan Bryant 把 main() 方法放在一个类中的目的是因为你可以有多个不同类中的 main() 方法。当程序被创建时只能运行一个 main() 方法,但类可以在运行时指定。我的理解正确吗? - Ben Reed
@ispeakcode,这是完全可能的,但这不是主要意图。主要意图是帮助组织复杂性(正如大多数语言特性的主要意图一样)。将Main()放在类内部只是C#中做出的决策所产生的副作用,以实现该组织方式。 - Dan Bryant
显示剩余2条评论

3
在“类”中放置main()方法的目的是什么?
C#是一种面向对象的语言,也就是说,每个方法必须属于一个类。
这个所谓的“类”不会创建任何对象。
考虑以下完全有效的代码。
Dog类具有一些功能,例如体重、名字等。它还包含一个main方法,从中创建并使用Dog类的多个实例。
main方法只是一个特殊的方法,从中应用程序将加载。
public class Dog
{
    int weight;
    int name;

    public static void main (string[] args)
    {
        Dog myDog = new Dog();
        myDog.weight = 15;
        myDog.name = "Fido";

        Console.WriteLine("MyDog Name: {0} Weight: {1}", myDog.weight, myDog.name);

        Dog bigDog = new Dog();
        bigDog.weight = 100;
        bigDog.name = "Beethoven";

        Console.WriteLine("BigDog Name: {0} Weight: {1}", bigDog.weight, bigDog.name);
    }
}

为什么main()函数被称为方法?
函数/方法是同一回事...

0

你必须有一个 main() 方法来运行程序, 同时你可以拥有多个独立的类,每个类都有自己的 void main() 方法来测试这个类。


0
在VB中,它们区分函数和子程序。在C#中,如果它具有除void之外的返回值,则可以将该方法视为类似于VB的函数。由于没有方法一词,因此如果其位于类结构内并正确构造,则名称main被认为是一种方法。开始方法结构的事情是{您只能在具有void作为返回类型的主方法中返回void,或者只需在任何时候键入return,它将立即转到主方法结构的末尾...}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接