2016-06-09 63 views
0

我有一個函數,我根據誰是發起者來分配變量。不能隱式地從一個類轉換爲另一個類

功能是這樣的,如果它的字符轉而攻擊Attack(true)

進入此功能

function Attack(bool CharacterAttacking){  
     var Attacker = Monster; 
     var Target = Character; 

     if (CharacterAttacking) 
     { 
      Attacker = Character; 
      Target = Monster; 
     } 

怪物被默認選中。

,但如果我想圍繞它切換,使字符是在攻擊我if,然後我得到的錯誤

不能鍵入Game.Models.Monster隱式轉換爲Game.Models.Character

我該如何切換它,讓攻擊者變成角色,目標變成怪獸?

謝謝

+1

使用'接口'並確保Games.Models.Monster類和Games.Models.Character類都實現該接口。任何常用的功能都將在界面上聲明。然後它們可以互換使用。 –

回答

5

在這種情況下,您需要實現一個接口或基類。這允許多個類類型被放置在相同的對象類型中,只要它們實現該接口或從基類派生。

public interface IFighter 
{ 
    void Attack(); 
    void Defend(); 
} 

然後你將不得不在你的Character和Monster類中實現這個接口。

public class Monster : IFighter 
{ 
    public void Attack() 
    { 
     //some attack logic 
    } 

    public void Defend() 
    { 
     //some defense logic 
    } 
} 

public class Character : IFighter 
{ 
    public void Attack() 
    { 
     //some attack logic 
    } 

    public void Defend() 
    { 
     //some defense logic 
    } 
} 

一旦你有了這個設置,你可以將這些屬性添加到你的類中,持有戰鬥信息。然後你可以實現你正在嘗試的方法。

public class Battle 
{ 
    public IFighter Attacker = Monster; 
    public IFighter Target = Character; 

    public void Attack(bool characterAttacking) 
    { 
     if (characterAttacking) 
     { 
      Attacker = Character; 
      Target = Monster; 
     } 
    } 
} 
+0

「需要實現接口」對於我的口味來說有點太強大了......基類可以做得很好。 –

相關問題