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();
通常在 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();