C#如何通过静态方法实例化继承的对象?

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

我目前正在开发基于等轴测图的游戏。目前,我有一个带有图块的网格,这些对象包含有关它们的位置,类型和各种对象(例如树)的数据,这些数据可以放在它们的顶部。

我创建了一个抽象的TileObject类,还有另一个名为Tree的类,它从TileObject继承。我的目标是拥有一个静态函数,该函数负责不使用构造函数而创建这些TileObjects。

我也尝试过使用泛型(甚至使用Activator类),但似乎没有用。我的想法是泛型,system.type,typeof,但我无法将它们全部放在一起。

public abstract class TileObject
{
    protected TileObject() { }

    public Tile Parent { get; set; }
    public string ObjectType { get; set; }

    public static TileObject CreateObject(string objName, Tile parent)
    {

    }
}

public class Tree : TileObject
{

}

我认为此解决方案可能有效,但似乎已经过硬编码

public static TileObject CreateObject(string objName, Tile parent)
{
    TileObject x;
    if(objName == "Tree")
        x = new Tree();
    else if(objName == "Chair")
        ...
}
c# unity3d grid tile
1个回答
0
投票

一个解决方案可能是泛型!

这里是一个例子:


public static TileObject CreateObject<T>(Tile parent) where T : TileObject
{
    TileObject x = new T();
}

看看where T : TileObject

这意味着您的类型T TileObject,因此您甚至不必照顾该类型。

© www.soinside.com 2019 - 2024. All rights reserved.