Java 和 C# 在声明和初始化变量方面的区别

Difference between Java and C# in Declaring and Initializing variables

通常在 java 中,您可以声明一个实例变量,然后在构造函数或方法中对其进行初始化。

但是当我在 C# 中尝试这样做时,它给了我一个错误,说它需要是一个静态变量。

在此图中,我声明了 MailMerger 对象的实例变量,然后在构造函数中对其进行了初始化。但是当我尝试使用该实例时,它给了我一个错误,要求它是 static.

有人可以向我解释一下背后的原因吗? 提前谢谢你。

原因是 Main 方法是静态的,而 merge 变量在实例范围内。

您应该将构造函数和变量都更改为静态。

您正在从静态方法调用非静态成员,如错误所述,这是不允许的。您也可以通过将 MailMerger 设置为静态来修复它

Class Program
{
    static MailMerger merge;

    //rest of your code
}

另一种选择是在静态方法中创建 MailMerger 的实例。

您在 Program 构造函数中删除了 MailMerger,但您必须在 Main 方法中创建 Program 的实例。在您的 Main 方法中,您正在调用从未初始化的 merge 。如果您创建 Program class 的新实例,如下所示:

Program p = new();

你可以调用 merge 字段:

p.merge.Merge();