我真的不知道该如何寻找解决方案,因为它看起来如此抽象,所以我在这里。
例如,如果我有一个基类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基类和不同的子类?
我不是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>();