想像這樣接受它應該返回的接口的類型和接口類型的方法 - 是否有可能?
ISomeInterface someVar = creator.Create(typeof(SomeClass),
typeof(ISomeInterface));
C#代碼應該發生什麼?方法creator.Create需要兩個參數:第一個是要創建的對象的類型,第二個是該方法應該將新創建的對象轉換爲該類型並返回的類型。
所以,像在示例代碼:我們要使用的界面,我們知道類實現,所以我們要求創建對象,並指定返回類型應該是接口,我們感興趣的是
是,甚至有可能實現的。不知何故?基於一些複雜的泛型聲明的泛型,反射,動態方法創建?更復雜的東西?我很樂意提供建議。
當然,我們沒有考慮最簡單的解決方案,即將返回值顯式投射到ISomeInterface。方法應該返回創建的對象作爲我們要求的接口。
如果你想知道什麼,我需要它,我試圖徒勞的追求簡化我的類工廠:)
編輯的一些巧妙的方式複雜化我的工作代碼:
當前通用方法創建:
public T Create<T>(Type type)
{
return (T)Activator.CreateInstance(type);
}
但這不是我想要的是提供兩種類型,基本建立第一個對象,而是作爲第二返回。我沒有在我的代碼庫中實現不同接口的Create方法。
使用的另外的示例:
IFoo f = Create(typeof(Foo), typeof(IFoo));
IBar b = Create(typeof(Bar), typeof(IBar));
所以,你可以看到方法根據在第二個參數設置類型返回每個時間不同的接口。而且沒有辦法使用類型約束,或者我不知道如何去做。
請注意,你不當你將一個對象轉換爲一個接口時,不會得到兩個不同的對象,接口只是查看一個對象的另一種方式。換句話說,因爲你的方法不是通用的,所以它將不得不返回'object',所以你可能只需要在方法之外進行轉換。 – 2011-06-16 20:10:32
這就是我所害怕的,但是如果沒有別的方法...... – grapkulec 2011-06-16 20:17:49
你能解釋一下這種方法的用途嗎?我不知道爲什麼要創建一個「A」類型的對象,但是將它返回爲類型「B」。如果方法返回值的接收者是'B'類型,但想要調用'A'類型的方法,那麼只需將其返回到'A'即可...... – 2011-06-16 20:19:45