我有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类中使用它 构造
由于
答案 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#中不可能继承多个类。