为什么我不能使用 Main() 中的非静态字段?
Why can't I use non-static fields from Main()?
如果这个问题之前已经解决,我深表歉意,因为我是编码新手,不认识一半的代码。
我试图在 File.WriteAllText
方法的内容中使用 field/variable,但出现错误
CS1020 - An object reference is required for the non static field, method, or property "Program.writePath"
我不太明白这是什么意思。
我知道将字符串直接写入方法可以修复错误,而且我的 IDE 中有一个自动修复工具,它想在每个东西之前放置参数名称“路径”和“内容”(虽然这并不能解决问题)。为什么会这样?如何在方法中使用我的字段而不是直接输入它们?
代码如下:
using System;
using System.IO;
namespace w3consoleapp30_Cs_files
{
class Program
{
public string writePath = "filename.txt";
public string writeText = "Hello, World!";
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
File.WriteAllText(writePath, writeText);
}
}
}
C#(与所有语言一样)对于允许程序的哪些部分与程序的其他部分进行交互有特定的规则。您将在继续编码时了解这些规则的原因。编译器告诉你你违反了规则,所以这不是一个有效的程序。
在c#中,当某些东西是静态的时,意味着整个程序中只有那些东西之一。 C# 有一个特殊的规则,即 main 函数必须始终是静态的,这样可以确保您的程序只能以一种方式启动。
您的代码违反的规则是您尝试使用来自静态函数的 non-static 字段。 Main 是静态的,所以它看不到 writePath 或 writeText,因为它们不是。 Main 不知道要使用哪个 writePath 或 writeText,因为有人可以制作他们自己的 Program 副本,并且它会有自己的那些不同版本的字段。
有多种方法可以解决此问题,但目前最简单的方法是在设置 writePath 和 writeText 的行的开头添加 static 关键字。也就是说main方法只有一个,你的Program中只有一个writePath和一个writeTextclass.
另一种说法是它们是 const(常量),这意味着它们只能有一个,但它们也永远无法更改。
你需要
using System;
using System.IO;
namespace w3consoleapp30_Cs_files
{
public static class Program
{
public static string writePath = "filename.txt";
public static string writeText = "Hello, World!";
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
File.WriteAllText(writePath, writeText);
}
}
}
因为您的 Main 必须是静态的,所以它只能访问与 class 关联的静态数据。因此需要将字符串更改为静态的(或者您可以将它们放在 Main 中)。最好也将 Main 'hosting' class ('Program') 声明为静态。这将防止你再次向它添加其他非静态的东西
如果这个问题之前已经解决,我深表歉意,因为我是编码新手,不认识一半的代码。
我试图在 File.WriteAllText
方法的内容中使用 field/variable,但出现错误
CS1020 - An object reference is required for the non static field, method, or property "Program.writePath"
我不太明白这是什么意思。
我知道将字符串直接写入方法可以修复错误,而且我的 IDE 中有一个自动修复工具,它想在每个东西之前放置参数名称“路径”和“内容”(虽然这并不能解决问题)。为什么会这样?如何在方法中使用我的字段而不是直接输入它们?
代码如下:
using System;
using System.IO;
namespace w3consoleapp30_Cs_files
{
class Program
{
public string writePath = "filename.txt";
public string writeText = "Hello, World!";
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
File.WriteAllText(writePath, writeText);
}
}
}
C#(与所有语言一样)对于允许程序的哪些部分与程序的其他部分进行交互有特定的规则。您将在继续编码时了解这些规则的原因。编译器告诉你你违反了规则,所以这不是一个有效的程序。
在c#中,当某些东西是静态的时,意味着整个程序中只有那些东西之一。 C# 有一个特殊的规则,即 main 函数必须始终是静态的,这样可以确保您的程序只能以一种方式启动。
您的代码违反的规则是您尝试使用来自静态函数的 non-static 字段。 Main 是静态的,所以它看不到 writePath 或 writeText,因为它们不是。 Main 不知道要使用哪个 writePath 或 writeText,因为有人可以制作他们自己的 Program 副本,并且它会有自己的那些不同版本的字段。
有多种方法可以解决此问题,但目前最简单的方法是在设置 writePath 和 writeText 的行的开头添加 static 关键字。也就是说main方法只有一个,你的Program中只有一个writePath和一个writeTextclass.
另一种说法是它们是 const(常量),这意味着它们只能有一个,但它们也永远无法更改。
你需要
using System;
using System.IO;
namespace w3consoleapp30_Cs_files
{
public static class Program
{
public static string writePath = "filename.txt";
public static string writeText = "Hello, World!";
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
File.WriteAllText(writePath, writeText);
}
}
}
因为您的 Main 必须是静态的,所以它只能访问与 class 关联的静态数据。因此需要将字符串更改为静态的(或者您可以将它们放在 Main 中)。最好也将 Main 'hosting' class ('Program') 声明为静态。这将防止你再次向它添加其他非静态的东西