我不知道,但也許:
public Wrapper<T>
where T : IMyInterface, new()
{
public IMyInstance instance { get; set; }
public Wrapper()
{
instance = new T();
instance.Run();
}
}
這樣使用它:
Wrapper<SomeClass> wrapper = new Wrapper<SomeClass>();
如果你想保留包裝上的某種名單,只是得到他們共同的,非通用類:
public abstract class BaseWrapper
{
}
public class Wrapper<T> : BaseWrapper
...
編輯:迴應評論
也許問題不在包裝類中。如果你從用戶那裏得到一個字符串,你只有兩個選擇:一個巨大的開關或反射。
您可能會更改例如通過改變列表框的內容:
public class ComboBoxItem
{
public string Title { get; set; }
public Func<IMyInterface> creator { get; set; }
public override string ToString()
{
return Title;
}
}
現在創建這些項目的清單,並把它傳遞到ComboBox:
var items = new[] {
new ComboBoxItem { Title = "First class", creator =() => new FirstClass() },
new ComboBoxItem { Title = "Second class", creator =() => new SecondClass() },
}
你必須來填充組合框無論如何,所以會是一些硬編碼。重點是隻在一個地方對類列表進行硬編碼(甚至可以在與ComboBox無關的地方,然後基於該列表重新創建ComboBox內容)。
'wrapper'的目標是什麼?爲什麼我會在新的Imp12()'上面調用'new Wrapper(「Imp12」)。Instance'? – Kobi
包裝具有在類之間共享的方法,它們產生相同的數據格式,並且包裝器在Run()方法完成後基本做一些處理。 – user1492051
爲什麼不讓這些類實現一個通用接口? –