c#-非静态字段,方法或属性需要对象引用
作者:互联网
我知道人们以前曾问过这个问题,但这种情况过于具体,我对基本面感到困惑.
我有C#程序的两个基本版本,一个有效,一个无效.如果有人可以解释为什么会出现错误,我会喜欢的.第二个程序中的非静态字段,方法或属性需要对象引用.
作品:
namespace Experiments
{
class Test
{
public string myTest = "Gobbledigook";
public void Print()
{
Console.Write(myTest);
}
}
class Program
{
static void Main(string[] args)
{
Test newTest = new Test();
newTest.Print();
while (true)
;
}
}
}
不起作用:
namespace Experiments
{
class Test
{
public string myTest = "Gobbledigook";
public void Print()
{
Console.Write(myTest);
}
}
class Program
{
public Test newTest = new Test();
static void Main(string[] args)
{
newTest.Print();
while (true)
;
}
}
}
当我尝试在第二个程序中对Test()类的文本进行Print()时,它给我带来了错误:非静态字段,方法或属性需要对象引用,而我不明白为什么.我可以看到它与声明Test()类实例的位置有关,但是我不记得在C中发生过类似的事情,因此它使我感到困惑.
这是怎么回事?
解决方法:
这不是因为类的定义,而是关于关键字static
的用法.
Test类的newTest对象是Program类的公共成员,而main是program类内部的静态函数.错误消息中巧妙地提到了该对象.非静态方法需要对象引用.因此,您需要将newTest对象声明为静态对象,以便以诸如main之类的静态方法访问它们.
像这样
public static Test newTest = new Test();
补充说明
考虑到您在Test类中定义了方法Print as static,如下所示:
public static void Print()
{
Console.Write(myTest);
}
然后,您不能像当前使用的那样调用该方法(newTest.Print();).而是必须使用Test.Print();,因为不能通过实例引用静态成员.而是通过类型名称引用它.例如,考虑以下课程
标签:declaration,initialization,non-static,c,class 来源: https://codeday.me/bug/20191026/1937701.html