[英]Why can't I reference a list of a child class in a function expecting a list of the parent class?
[英]What can I do if I need to reach a function in child class and I have its parent reference?
抱歉標題,我無法想象更具體的標題,但讓我解釋一下。
假設我們有 2 個不同的角色。 一個是盟友,這是我們的角色,另一個是敵人。 假設我們是不朽的,所以 Ally 不會死。
public class Ally : BaseCharacter
{
public override void Attack() { }
}
public class Enemy : BaseCharacter
{
public void Die() { }
public override void Attack() { }
}
public class BaseCharacter
{
public BaseCharacterData baseCharacterData;
public virtual void Attack() { }
}
在這里,Attack() 函數在這些子類之間是通用的。 但 Die() 函數不是。
我們有這些類的數據類。
public class AllyData : BaseCharacterData
{
}
public class EnemyData : BaseCharacterData
{
public string health;
}
public class BaseCharacterData
{
public string name;
}
而且在這里,NAME 變量是常見的,而 HEALTH 不是(因為 Ally 不能死)。
問題是這樣的,當我嘗試從另一個腳本創建 BaseCharacter 時,我將 CharacterData 分配給 Ally,這很好。
但是當我創建 Enemy 時,Enemy 的生命值不會被設置(我可以從其他地方以某種方式設置它,但是當我需要到達它時它也是一個問題)。 另外,假設我們有另一個名為 TEMP 的類,它的一個函數采用 CharacterData。 但是,如果 CharacterData 屬於 Enemy,它將無法達到 HEALTH,或者它將無法從 Enemy 的 BaseCharacter 腳本調用 Die() 函數,因為它不常見。
這整個場景不是真實的,沒有意義,但我嘗試簡化它並告訴我我的問題是什么樣的。
我的問題是,我做錯了什么還是這種情況只需要一個更好的結構來實現我的目標?
我對所有建議或解決方案持開放態度,但我並不想輕易解決我的問題或以不好的方式解決它。 只是試圖找到正確的方法。
謝謝大家。
死亡不是召喚角色的東西。 它是響應角色發生的事情而發生的事情。 角色可能發生的事情:
所以這些是你的方法。 敵人可能會死於它們,而盟友則不會,但即使是盟友也會經歷一些其他影響(頭暈、昏迷等)。
您已將類似於 baseCharacter 類的數據類定義為兩種類型。 為什么不在類本身中設置信息? 消除替代和重復第一節也是最重要的編程課。
public class Ally : BaseCharacter
{
public override void Attack() { }
}
public class Enemy : BaseCharacter
{
public float health;
public void Die() { }
public override void Attack() { }
}
public class BaseCharacter
{
public string name;
public virtual void Attack() { }
}
public void Start()
{
BaseCharacter character = new Enemy();
if (character is Enemy myEnemy)
{
myEnemy.health = 52; // for e.g
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.