1

C# 很新,对你们中的大多数人来说可能是一个简单的问题,我对此几乎没有经验。

假设我有一个类可以为太空船创建和处理模型、控制、声音等,所以:

Ship myShip = new Ship();

创建船,我可以看到它,那里一切都很好,我可以用“船”访问它的变量,我可以制作另一个并称它为别的东西..但是如果我有另一个类是用于......战舰.. 说另一个战斗机.. 战斗中船只的 AI 有一个“目标”。所以我可以使用:

Ship target;

并且“目标”将引用可能更改为另一个 Ship 实例的当前目标,但我的问题是,是否有一个变量类型可以处理这些类中的任何一个,例如目标从 Ship 实例切换到战舰。我会收到一个错误,它无法从战舰类型转换为舰船。

如果没有这样的变量类型,是否有更简单的方法来执行此操作,而不是为可能成为目标的每种类型的 Class 使用不同的变量?

并且只是以防我不太清楚..我基本上希望它能够正常工作:

WhatsThisHere target = new Ship();
target = new DifferentTypeOfShip();

谢谢!!

4

4 回答 4

3

使用接口并Ship从它继承。那么你的目标不必只是船只。

interface ITargetable
{
    //
}

class Ship : ITargetable
{
    //
}

在另一个类中,您将只使用ITargetable.

于 2013-06-28T09:51:27.153 回答
0

你可以创建

public class Ship {
   //Common behaviour and parameters for every ship in the world
}

public class BattleShip : Ship {
   // get basic Ship behavior and adds it's 
   // own battle specific properties and functions
}

所以在你喜欢的代码中:

Ship me = new BattleShip(); 
Ship enimy = new BattleShip(); 
me.Target = enimy;
于 2013-06-28T09:45:13.087 回答
0

让所有看起来像船的类型派生自Ship

public class BattleShip : Ship
{

}
于 2013-06-28T09:45:53.643 回答
0

您可以做的一件事是创建一个接口,您的所有船只都可以从该接口实现。通过这种方式,您可以创建通用函数/方法(请注意,接口不能在函数中实现任何代码,因为接口是抽象的)并在您的类中实现它们。例如。

public interface IShipInterface
{
    //any common properties here

    //any common methods/functions here
    void Target();
    void AnythingElseYouNeed();
}

public class Ship : IShipInterface
{
    //fields

    public Ship()
    {
        //constructor
    }

    public void Target()
    {
        //implement your ship Target method here
        throw new NotImplementedException();
    }

    public void AnythingElseYouNeed()
    {
        //implement other function code here
        throw new NotImplementedException();
    }
}

public class BattleShip : IShipInterface
{
    //fields 

    public BattleShip()
    {
        //constructor
    }

    public void Target()
    {
        //here is your battleship targetting, which could be completely different from your ship targetting.
        throw new NotImplementedException();
    }

    public void AnythingElseYouNeed()
    {
        throw new NotImplementedException();
    }
}

从这里你可以像这样创建它们;

IShipInterface ship = new Ship();
IShipInterface battleShip = new BattleShip();

这具有优势,因为您的所有船只都可以通过类型 ShipInterface 引用,例如在 foreach 循环中

foreach (IShipInterface ship in ShipList.OfType<BattleShip>())
        {
            //all your battleships
        }
于 2013-06-28T09:51:14.877 回答