子类稍有不同

问题描述 投票:0回答:1

我真的不知道该如何寻找解决方案,因为它看起来如此抽象,所以我在这里。

例如,如果我有一个基类public abstract class BuildingBaseObject,然后有2个子类,其中一个包含RuleTile变量,另一个包含GameObject变量,则可以通过某种方法从单个函数(在另一个类中)访问这两个变量之一?我不想使用object关键字,因为它会破坏类型的持久性,并且根本无法与我的代码一起使用。

可重复代码

public abstract class BuildingBaseObject {
    //Irrelevant Stuff
}

public class BuildingTile : BuildingBaseObject
{
    public RuleTile ruleTile;
}

public class BuildingObject : BuildingBaseObject
{
    public GameObject objectTile;
}

public class UIShipItem : MonoBehaviour {

    Object buildingObject;
    public object BuildingObject
    {
        get
        {
            if (buildingObject is BuildingObject) return buildingObject as BuildingObject;
            else if (buildingObject is BuildingTile) return buildingObject as BuildingTile;
        }
        set
        {
            if(value is BuildingObject) buildingObject = value as BuildingObject;
            if(value is BuildingTile) buildingObject = value as BuildingTile;
            gameObject.GetComponent<Image>().sprite = (buildingObject as BuildingBaseObject).sprite;
        }
    }

}

是否有一种方法可以很好地做到这一点,或者我应该为BuildingBaseObject的每个子类创建一个UIShipItem基类和不同的子类?

c# unity3d
1个回答
0
投票

我不是Unity编码器,但是就C#而言,它可以工作:

public class UIShipItem<T> : MonoBehaviour where T : BuildingBaseObject
{
    T buildingObject;
    public T BuildingObject
    {
        get
        {
            return buildingObject;
        }
        set
        {
            buildingObject = value;
            gameObject.GetComponent<Image>().sprite = buildingObject.sprite;
        }
    }
}

您将这样使用它:

var x = new UIShipItem<BuildingTile>();
© www.soinside.com 2019 - 2024. All rights reserved.