从基类获取/设置私有变量

本文关键字:变量 设置 基类 获取 | 更新日期: 2023-09-27 18:34:04

Class GameObject
{
     private Vector2 position
     public Vector2 Position
     {
        get { return position; }
        set { position = value; }
     }
}

上面是我的基类,我想更改我继承的类中的位置值,但我似乎无法访问该变量。下面是我继承的类

Class Enemy : GameObject
{
      public void MoveRight()
      {
            //I want to change the value of position here but cannot access the variable
            position.X += 1.0f; 
      }
}

从基类获取/设置私有变量

为什么需要访问变量? 只需更新属性值:

class Enemy : GameObject
{
      public void MoveRight()
      {
            //I want to change the value of position here but cannot access the variable
            this.Position.X += 1.0f; 
      }
}

解决方案 1:将私有成员提升为受保护。

Class GameObject
{
     protected Vector2 position
     public Vector2 Position
     {
        get { return position; }
        set { position = value; }
     }
}

受保护的成员类似于私有成员,也可以通过派生类型访问。

解决方案 2:按照 Mike 的建议通过属性访问成员。

解决方案 3:使用反射。(不是你需要的,但仅供参考。永远不要用霰弹枪杀死苍蝇)

您无法访问"位置",因为您将其声明为 PRIVATE。它只能在声明它的类中访问。

如果要

使其可供派生类访问,请更改为 PROTECTED。

这样,它在类之外将不可见,但派生类将能够看到并使用它。

编辑

但是,如果你在"Position"成员集/get中什么都不做,那么你就可以使用auto属性:

public Vector2 Position { get; set; }

忘记领域。在任何情况下,不要忘记"位置"或"位置"必须在使用前初始化。

正在寻找类似的,这应该是答案
例如,在基本(parrent)类类型中:

public bool Connected { get; protected set; } = false;

受保护 允许派生类设置值。
虽然它们在派生(子)类之外不可写,但只能读取。
在子类中,您可以设置它们。