2010-02-15 13 views
5

Actualmente estoy escribiendo un administrador de recursos para mi juego. Esta es básicamente una clase que manejará todo tipo de otros objetos de diferentes tipos, y cada objeto se denomina por nombre (System.String). Ahora esta es mi implementación actual, pero dado que estoy usando un diccionario de objetos, todavía necesitaré lanzar cada objeto. ¿Hay alguna manera de usar genéricos en este caso? No soy muy fuerte en eso, traté de leerlos y terminó confundiéndome más.Diccionario usando genéricos

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."); 
    } 
} 
+0

¿Existe una interfaz común para los recursos? – moogs

+5

No es pertinente a la pregunta, pero fyi "recurso" tiene solo una "s". –

+1

De hecho, el francés es mi lengua materna y en francés se necesitan dos. Siempre me atrapa. Al igual que la dirección, solo una 'd' en francés. Gracias por señalar eso;) –

Respuesta

2

¿Es necesario tener solo un conjunto de recursos o puede tener uno para cada tipo de recurso?

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")); 
    } 
} 
+0

Bueno, en ese caso, realmente no necesito genéricos. La idea era tener una sola lista de recursos y usar genéricos para evitar el lanzamiento de tipos, pero creo que aquí me confundieron. –

+0

Bueno, podrías evitar la clase 'ResourceMap' por completo y simplemente usar' Dictionary', quizás eso sería más legible después de todo. La pregunta es, ¿necesitas poder tomar recursos sin saber qué tipo son? No puedo pensar en semejante escenario, personalmente. –

+0

No, lo que quiero hacer es poder acceder a los recursos usando solo una propiedad/método, aunque esos recursos pueden ser de diferentes tipos. –

2

Imagino que todos estos objetos tienen al menos algunas cosas en común. Encuentre ese terreno común y conviértalo en una interfaz que implementen sus objetos. Luego use un Dictionary<string, IMyInterface>.

+0

En realidad, esos no tienen absolutamente nada en común. Los objetos son fuentes, imágenes y sonidos. Todavía necesitaría lanzarlos usando una interfaz porque tengo métodos externos que solo usarán esos objetos. –

+0

En ese caso, desea crear algo que use funciones sobrecargadas que funcionen según la resolución de tipo para las llamadas a funciones. –

+0

¿Pero aún no será necesario desempaquetar ya que todavía los almacenaré como objetos? –

Cuestiones relacionadas