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

C# How to instantiate inherited objects via a static method?

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

我创建了一个抽象的 TileObject class,还有另一个 class 继承自 TileObject 的 Tree。我的目标是拥有一个静态函数,负责在不使用构造函数的情况下创建这些 TileObjects。

我也尝试过使用 Generics(甚至使用 Activator class),但似乎没有用。 我的想法是泛型,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")
        ...
}

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

这是一个例子:


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

看看where T : TileObject, new()

这意味着你的类型 T 成为 TileObject,所以你甚至不必关心类型。