【问题标题】:Difference between Java and C# in Declaring and Initializing variablesJava和C#在声明和初始化变量方面的区别
【发布时间】:2021-09-23 07:51:12
【问题描述】:

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

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

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

谁能给我解释一下这背后的原因? 提前谢谢你。

【问题讨论】:

  • FWIW,这会在 Java 中产生同样的错误!

标签: java c# static initialization declaration


【解决方案1】:

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

Class Program
{
    static MailMerger merge;

    //rest of your code
}

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

【讨论】:

  • 谢谢你的澄清,我只是很困惑,因为在java中我只在非静态方法中使用了实例,但我从来没有意识到,所以java和C#之间没有实际区别,两者都会给出一个错误,我只是没有得到足够的信息,谢谢你再次澄清。
【解决方案2】:

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

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

【讨论】:

  • 我知道如何解决它,我只是想知道它是如何在 java 上工作的,但你让我意识到即使在 java 中它也只能在非静态方法中工作,所以没有实际区别我只是感到困惑。谢谢你的澄清。
【解决方案3】:

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

Program p = new();

你可以调用merge字段:

p.merge.Merge();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多