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

时间:2014-12-12 22:59:13

标签: c# inheritance xna

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; 
      }
}

4 个答案:

答案 0 :(得分:1)

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

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 :(得分:0)

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

如果要使派生类可以访问,请更改为PROTECTED。

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

修改

但如果你在"位置"成员集/获取,比您可以使用自动属性:

public Vector2 Position { get; set; }

忘了这个领域。 无论如何,不​​要忘记"位置"或者"位置"必须在使用前初始化。

答案 2 :(得分:0)

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

Class GameObject
{
     protected Vector2 position

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

受保护的成员就像私有成员一样,也可以通过派生类型访问。

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

解决方案3:使用reflection.(不是你需要的,但是fyi。永远不要用霰弹枪杀死苍蝇)

答案 3 :(得分:0)

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

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

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