如何从C#中的所有Base类继承所有属性

时间:2012-03-24 17:44:19

标签: c# constructor multiple-inheritance xna-4.0

我有XNA游戏,它包含这些类

public partial class Bird : Microsoft.Xna.Framework.GameComponent
{
    private Vector2 velocity;
    private Vector2 position;
    ..........................
    public Vector2 Velocity
    {
        get { return velocity; }
        set { velocity = value; }
    }
    public Vector2 Position
    {
        get { return position; }
        set { position = value; }
    }

}
public class BigRedBird : Microsoft.Xna.Framework.GameComponent,Bird
{

    public BigRedBird(Game game ,Rectangle area,Texture2D image)
        : base(game)
    {
        // TODO: Construct any child components here

    }
    .....................
}

如何从Bird类访问位置和速度,并在BigRedBird类中使用它 构造

由于

3 个答案:

答案 0 :(得分:3)

首先,你继承了两个非法的类。

由于Bird已经从GameComponent继承了它不是你在BigRedBird中没有提到它的问题它已经通过鸟继承了!

由于BigRedBird继承自Bird,它将具有所有属性,因此您只需要执行

public class BigRedBird : Bird 
{ 

    public BigRedBird(Game game ,Rectangle area,Texture2D image) 
        : base(game) 
    { 
        // TODO: Construct any child components here 
        this.Position= ....

    } 
    ..................... 
} 

答案 1 :(得分:2)

C#不支持多重继承,因此标题中问题的答案是 - 你不能。但我不认为这是你想要实现的目标。

为Bird类添加合适的构造函数:

public partial class Bird : Microsoft.Xna.Framework.GameComponent
{
   public Bird( Game game ) : base(game)
   {
   }

   public Bird( Game game, Vector2 velocity, Vector2 position ) : base(game)
   {
       Velocity = velocity;
       ...
   }
}

然后在派生类

中调用基类构造函数
public class BigRedBird : Bird
{
    public BigRedBird( Game game, ... ) : base(game, ... )
    {
    }
}

或者

public class BigRedBird : Bird
{
    public BigRedBird( Game game, ... ) : base(game)
    {
        base.Velocity = ...;  // note: base. not strictly required
        ...
    }
}

答案 2 :(得分:1)

仅从BigRedBird继承Bird。通过这样做,您仍然可以访问GameComponent中的内容,因为Bird继承了它。

顺便说一下,在C#中不可能继承多个类。