我有一个接口和两个实现接口的类。这些类具有泛型类型。我想从一个类的实例克隆到另一个类。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