Переезд в другую игру государства с ScreenManager


Я создаю игру на C#, и я создал ScreenManager так что я могу позвонить

ScreenManager.MoveToScreen(typeof(ScreenClassHere))

чтобы перейти к другой игре государств. Тем не менее, я чувствую, что мой метод создания экземпляра класса... не очень оптимальным. Смотрите сами.

    public static void MoveToScreen(Type s)
    {
        if (currentscreen != null) currentscreen.Remove();

        currentscreen = (Screen)s.GetConstructor(System.Type.EmptyTypes).Invoke(null);
        currentscreen.Init();
    }

Кто-нибудь знает, если есть лучший способ, чтобы создать экземпляр определенного класса из типа?



576
7
c#
задан 1 марта 2011 в 07:03 Источник Поделиться
Комментарии
3 ответа

Вы могли бы использовать дженерики

public static void MoveToScreen<T>() where T : Screen, new()
{
if (currentscreen != null) currentscreen.Remove();

currentscreen = new T();
currentscreen.Init();
}

В этом случае вам придется вызвать метод, как

ScreenManager.MoveToScreen<ScreenClassHere>();

19
ответ дан 1 марта 2011 в 07:03 Источник Поделиться

Я не люблю называть удалить способ, это предполагает, что вы удалите что-то из currentScreen но на самом деле это метод, который вызывается, когда currentScreen сам удаляется, если я правильно понял.

Кроме того, другие люди, предполагая, что дженерики являются правильными, вы должны использовать его. Но если вы еще раз окажетесь в необходимости создания экземпляра зная свой тип, не уходи GetConstructors пути. Используйте Активатор.Метод createinstance для этого.

5
ответ дан 2 марта 2011 в 05:03 Источник Поделиться

Придирчивые, но я хотел бы изменить если (currentscreen != нуль) currentscreen.Удалить(); для

if (currentscreen != null) {
currentscreen.Remove();
}

Я второй пдр по использованию дженериков.

4
ответ дан 1 марта 2011 в 08:03 Источник Поделиться