C # Как создать экземпляры унаследованных объектов с помощью статического метода? - PullRequest
0 голосов
/ 12 октября 2019

В настоящее время я работаю над изометрической игрой на основе плиток. В настоящее время у меня есть сетка с плитками, и эти объекты содержат данные об их положении, типе и различных объектах (например, деревьях), которые можно разместить поверх них.

Я создал абстрактный класс TileObject, и есть еще один класс с именем Tree, который наследуется от TileObject. Моя цель - создать статическую функцию, которая отвечает за создание этих объектов TileObject без использования конструктора.

Я тоже пробовал это с Generics (даже используя класс 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")
        ...
}

1 Ответ

1 голос
/ 12 октября 2019

Одним из решений могут быть дженерики!

Вот пример:


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

Взгляните на where T : TileObject, new()

Что означает ваш тип T будет TileObject, поэтому вам даже не нужно заботиться о типе.

...