📜  CS0120:非静态字段、方法或属性“PlayerControls.currentState”需要对象引用 - C# (1)

📅  最后修改于: 2023-12-03 14:40:15.913000             🧑  作者: Mango

CS0120: 非静态字段、方法或属性“PlayerControls.currentState”需要对象引用 - C#

介绍

编程中常常会遇到类的静态成员和实例成员的使用问题。其中,静态成员是属于类的,而不属于该类的任何实例。而实例成员则属于类的每个实例对象。在使用静态成员时,不需要创建该类的实例对象来访问该成员。而在使用实例成员时,则需要通过实例对象来访问该成员。

CS0120 是 C# 编译器的一种错误提示,表示当访问非静态字段、方法或属性时,需要先创建该类的实例对象,并通过该对象来访问实例成员。

代码片段

下面是一个简单的代码片段,演示了如何在使用非静态字段、方法或属性时,需要对象引用。

public class PlayerControls
{
    public string currentState;

    // 构造函数
    public PlayerControls()
    {
        currentState = "Idle";
    }

    // 实例方法
    public void Move()
    {
        currentState = "Moving";
    }

    // 静态方法
    public static void Attack()
    {
        currentState = "Attacking";  // 报错,无法访问非静态字段
    }
}

class Program
{
    static void Main(string[] args)
    {
        PlayerControls player1 = new PlayerControls();  // 创建实例对象
        player1.Move();  // 调用实例方法
        Console.WriteLine(player1.currentState);  // 输出:Moving
        PlayerControls.Attack();  // 报错,需要对象引用
    }
}
解决方案

如果遇到 CS0120 错误,需要考虑以下两种解决方案:

  1. 将非静态成员改为静态成员,或将静态成员改为非静态成员;
  2. 创建该类的实例对象,并使用该对象来访问实例成员。

一般情况下,我们应该根据实际需求来决定使用静态成员还是实例成员。如果需要访问实例成员,则必须先创建该类的实例对象,并通过该对象来访问实例成员。