繁体   English   中英

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

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

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

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

我也用 Generics 试过这个(即使使用 Activator 类),但似乎没有用。 我的想法是 generics, 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")
        ...
}

一种解决方案可能是 generics !

这是一个例子:


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

看看where T: TileObject, new()

这意味着您的类型 TTileObject ,因此您甚至不必处理类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM