2010-02-15 37 views
5

我目前正在爲我的遊戲寫一篇資源管理器。這基本上是一個類,它將處理各種不同類型的其他對象,並且每個對象都通過名稱引用(System.String)。現在這是我當前的實現,但由於我使用的是對象字典,我仍然需要投射每個對象。在這種情況下是否有使用泛型的方法?我在這些方面並不是很強大,我試着閱讀它們,結果讓我更加困惑。使用泛型的字典

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

是否有一個通用的資源接口? – moogs 2010-02-15 02:01:53

+5

與問題無關,但fyi「資源」只有一個「s」。 – 2010-02-15 02:03:14

+1

事實上,法語是我的母語,法語是兩種。永遠得到我。就像地址一樣,法語只有一個'd'。感謝您指出這一點;) – 2010-02-15 02:34:54

回答

2

是否需要只有一組資源,或者每種資源都可以有一組資源?

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

那麼在這種情況下,我並不需要仿製藥。這個想法是隻有一個資源列表,並使用泛型來避免類型轉換,但我認爲我在這裏弄糊塗了。 – 2010-02-15 03:53:48

+0

那麼,你可以完全避免使用'ResourceMap'類,只需使用'Dictionary' - 可能畢竟這會更具可讀性。問題是,你需要能夠獲取資源而不知道它們是哪種類型?我無法親自想到這種情況。 – 2010-02-15 14:49:32

+0

不,我想要做的就是隻能使用一個屬性/方法來訪問資源,儘管這些資源可以是不同的類型。 – 2010-02-15 20:04:07

2

我想象那些對象至少有一些共同的東西。找到共同點並將其變爲您的對象實現的界面。然後使用Dictionary<string, IMyInterface>

+0

其實,這些沒有任何共同之處。對象是字體,圖像和聲音。我仍然需要使用一個接口來施放它們,因爲我有隻使用這些對象的外部方法。 – 2010-02-15 02:14:11

+0

在這種情況下,您希望構建一些使用重載函數的功能,這些函數將根據函數調用的類型解析進行工作。 – 2010-02-15 02:16:12

+0

但是,仍然不需要拆箱,因爲我仍然將它們存儲爲對象? – 2010-02-15 02:36:04