3

ここに示すように、プレイヤーにアイテムを装備させる必要があります。

IEquiptableインターフェースです。

このメソッドは私のplayerクラスにあります。

public void equip(IEquiptable equipable) 
    {
        switch (equipable.GetType())
        {
            case equipable is Weapons:
                this.weapon = equipable;
                break;

            case equipable is Shield:
                this.shield = equipable
                break;

                //etc etc..
        }
    }

スイッチ式は bool、char、string、integral、enum、または対応する null 許容型でなければならないというエラーが表示されます。

player武器/盾などの各クラスにequitメソッドを配置し、クラスをパラメーターとして渡すことで処理できました。しかし、プレイヤーがアイテムを装備するのではなく、プレイヤーがアイテムを装備する必要があるため、これは少し非論理的だと思います。

4

3 に答える 3

3

あなたはすでにインターフェースを持っているので、それを利用してみませんか?

public interface IEquipable
{
    void EquipOn( Player player );
}

public class Shield : IEquipable
{
    public void EquipOn( Player player )
    {
        player.shield = this;
    }
}

public class Weapons : IEquipable
{
    public void EquipOn( Player player )
    {
        player.weapon = this;
    }
}

そしてあなたのコードは

public void equip(IEquiptable equipable) 
{
   equipable.EquipOn( this ); 
}

実際、このメソッドは単にそのジョブを適切なクラスに転送するだけに縮小されているため、このメソッドは必要ありません。あなたがあなたを持っているときはいつでも、そのメソッドIEquipableを呼び出すだけです。EquipOn

于 2013-10-06T17:47:15.557 に答える
1
public void equip(IEquiptable equipable) 
{
   var type = equipable.GetType();
   if(type is Weapons)
   {
    this.weapon = equipable;
    return;
   }
   if(type is Shield)
   {
     this.shield = equipable;
     return;
   }
   //etc
}
于 2013-10-06T17:42:05.270 に答える
0

ケースの値は定数でなければならないため、従来の解決策は列挙型を作成することです..

public enum EquippableTypes {
    Weapons,
    Shield,
    Antenna,
    Underwear
}

public partial class Player {
    public void Equip(IEquippable equippable) {
        switch(equippable.Type) {
            case EquippableTypes.Weapons:
                this.weapon=equippable;
                break;

            case EquippableTypes.Shield:
                this.shield=equippable;
                break;

            case EquippableTypes.Antenna:
                this.antenna=equippable;
                break;

            case EquippableTypes.Underwear:
                this.underwear=equippable;
                break;

            // ... 
        }
    }

    IEquippable weapon, shield, antenna, underwear;
}

したがって、装備可能なインターフェイス/クラスは次のようになります..

public partial interface IEquippable {
    EquippableTypes Type {
        get;
    }
}

public partial class Weapons: IEquippable {
    public EquippableTypes Type {
        get {
            return EquippableTypes.Weapons;
        }
    }
}

public partial class Shield: IEquippable {
    public EquippableTypes Type {
        get {
            return EquippableTypes.Shield;
        }
    }
}

public partial class Antenna: IEquippable {
    public EquippableTypes Type {
        get {
            return EquippableTypes.Antenna;
        }
    }
}

public partial class Underwear: IEquippable {
    public EquippableTypes Type {
        get {
            return EquippableTypes.Underwear;
        }
    }
}
于 2013-10-06T18:29:07.433 に答える