2012-11-20 35 views
1

我需要實現一個返回基於類型的對象的方法。如何實現返回基於類型傳遞的對象的方法

public interface IBase 
{ 
} 
public class Base1 : IBase { } 
public class Base2 : IBase { } 
public class Base3 : IBase { } 
public class MyClass 
{ 
    public IBase GetObject<T>() where T:IBase 
    { 
     // should return the object based on type. 
     return null; 
    } 

} 

是否需要維護GetObject方法內部的字典?

  Dictionary<Type, IBase> test = new Dictionary<Type, IBase>(); 

有沒有更好的方法呢?

[編輯]: - 我不想每次創建對象。我需要將它保存在內存中,以及何時有電話。我想從那裏返回對象。除字典外還有其他方法嗎?

+3

您可以發佈與特定類型的期望使用? –

+1

你的問題是:維護一個字典完全取決於你想創建新的對象還是返回緩存的對象。你需要更多的信息來澄清你的問題。 –

+0

好的,你爲什麼要保留創建的對象?一個原因可能是創建對象是昂貴的,並且您想緩存它們,並且可能有多個對象實例的實例。另一種情況是你想確保,只有一個對象實例(即Singleton Pattern),在這種情況下,你仍然可以使用我的答案,在那裏你使用一個新的操作符,但是隻有一個對象實例會創建。那麼不需要創建字典,這在我看來並不那麼優雅。我將編輯答案以顯示 – BuddhiP

回答

3
public class MyClass { 
    public IBase GetObject<T>() where T:IBase, new() // EDIT: Added new constraint 
    { 
     // should return the object based on type. 
     return new T(); 
    } 

} 
+2

這裏也需要一個新的()約束,因爲IBase是一個接口。 –

+0

用新的約束編輯答案。 – BuddhiP

+0

@Raiden,我編輯了這個問題。你能看到它嗎? –

3

在你的情況下,你有兩種方式:

1)建立自己的最愛,並自行維護它(像這樣)

public interface IBase {} 
public class Base1 : IBase { public int x; } 
public class Base2 : IBase { public int y; } 
public class Base3 : IBase { public int z; } 

public class MyClass 
{ 
    Dictionary<Type, IBase> m_typesCollection; 

    public MyClass() 
    { 
     // for example 
     m_typesCollection = new Dictionary<Type, IBase>(); 
     m_typesCollection.Add(typeof(Base1), new Base1()); 
     m_typesCollection.Add(typeof(Base2), new Base2()); 
    } 

    public IBase GetObject<T>() 
     where T : IBase, new() 
    { 
     if (m_typesCollection.ContainsKey(typeof(T))) 
      return m_typesCollection[typeof(T)]; 
     m_typesCollection.Add(typeof(T), new T()); 
     return m_typesCollection[typeof(T)]; 
    } 
} 

2) - 使用依賴注入容器,收集到你的類型

相關問題