我有一個接口和兩個實現接口的類。這些類具有泛型類型。我想從一個類的實例克隆到另一個類。C#泛型拷貝構造函數
interface IFoo
{
// stuff
}
class Foo<T> : IFoo
{
// foo stuff
// ifoo implementation
}
class Bar<T> : IFoo
{
// bar stuff
// ifoo implementation
}
我有一個Foo,想要一個酒吧。 Bar有一個帶IFoo參數的拷貝構造函數。 我創建一個擴展方法來實現克隆:
public static Bar<T> Clone<T>(this IFoo foo)
{
return new Bar<T>(foo);
}
調用該方法需要的類型:
someFoo.Clone<T> ...
有沒有辦法省略通過修改擴展方法調用方法時聲明的類型或者其他任何方式來允許實例傳入而不關心其基本類型?
更新 下面是如何使用它來更好地說明情況。
在一個方法中,我迭代一個集合並返回一個IFoo的枚舉。在該方法中,我查看源集合的屬性並確定Foo的類型。
IFoo foo = null;
string type = element.Attribute("Type").Value;
switch (type)
{
case "int":
foo = new Foo<int>();
break;
case "string":
foo = new Foo<string>();
break;
// etc
}
// other stuff
yield return foo;
調用方法有一個List。之後我從這個列表中選擇單獨的項目以供使用,此時我想要一個Bar而不是Foo。從列表中選擇時,實例的類型是IFoo,因爲它們只能看到「this IFoo foo」的擴展方法。我不想將IFoo投向Foo,這需要重新聲明T的類型。我只希望Foo告訴Bar它是什麼。這可能嗎?
也許我錯過了一些東西,但如果喲烏爾擴展功能採取的IFoo,它怎麼應該「克隆」成一間酒吧,如果它是Foo類型的? – 2009-02-18 23:09:47