Словарь с использованием дженериков - PullRequest
5 голосов
/ 15 февраля 2010

Я сейчас пишу менеджер ресурсов для моей игры. Это в основном класс, который будет обрабатывать все виды других объектов различных типов, и каждый объект называется по имени (System.String). Теперь это моя текущая реализация, но, поскольку я использую словарь объектов, мне все равно придется приводить каждый объект. Есть ли способ использовать Generics в этом случае? Я не очень силен в этом, я пытался читать их, и это просто смутило меня больше.

public static class ResourceManager
{
    public static Dictionary<string, object> Resources { get; private set; }

    public static void LoadResources()
    {
        Resources = new Dictionary<string, object>();

        //Sample resource loading code
        Resources.Add("number", 3);
        Resources.Add("string", "bleh");

        Console.Log("Loaded " + Resources.Count + " resources.");
    }
}

Ответы [ 2 ]

2 голосов
/ 15 февраля 2010

Нужно ли иметь только один набор ресурсов или у вас может быть один для каждого типа ресурса?

public class ResourceMap<T> extends Dictionary<string, T> { }

public static class ResourceManager
{
    public static ResourceMap<Font> Fonts { get; private set; }
    public static ResourceMap<Image> Images { get; private set; }
    public static ResourceMap<Sound> Sounds { get; private set; }

    public static void LoadResources()
    {
        Fonts = new ResourceMap<Font>();
        Images = new ResourceMap<Image>();
        Sounds = new ResourceMap<Sound>();

        Fonts.Add("Helvetica", new Font("Helvetica", 12, FontStyle.Regular));
        Images.Add("Example", Image.FromFile("example.png"));
    }
}
2 голосов
/ 15 февраля 2010

Я представляю, что у всех этих объектов есть по крайней мере несколько общих черт. Найдите это общее и превратите его в интерфейс, который реализуют ваши объекты. Затем используйте Dictionary<string, IMyInterface>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...