Как я могу наследовать все свойства от всех базовых классов в C # - PullRequest
1 голос
/ 24 марта 2012

У меня есть игра 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 ]

3 голосов
/ 24 марта 2012

Начнем с того, что вы наследуете от двух классов, которые были бы недопустимы.

Поскольку Bird уже наследует от GameComponent, не проблема, что вы не упоминаете его в BigRedBird, он уже унаследован от bird!

Поскольку BigRedBird наследует от Bird, он будет иметь все свои свойства, поэтому вам просто нужно сделать

public class BigRedBird : Bird 
{ 

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

    } 
    ..................... 
} 
2 голосов
/ 24 марта 2012

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
        ...
    }
}
1 голос
/ 24 марта 2012

Наследовать BigRedBird только от Bird.Сделав это, вы все равно сможете получить доступ к материалу из GameComponent, поскольку Bird наследует его.

Кстати, наследование от нескольких классов невозможно в C #.

...