我有一个接口,和两个实现该接口的类。这些类都有泛型类型。我想从一个类的实例克隆到另一个类。
interface IFoo
{
// stuff
}
class Foo<T> : IFoo
{
// foo stuff
// ifoo implementation
}
class Bar<T> : IFoo
{
// bar stuff
// ifoo implementation
}
我有一个Foo对象,想要一个Bar对象。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;
调用方法有一个列表。之后我从这个列表中选择单个项目以供使用,此时我想要的是 Bar 而不是 Foo。当从列表中进行选择时,实例的类型为 IFoo,因为它们只能看到“this IFoo foo”的扩展方法。我不想将 IFoo 强制转换为 Foo,因为那会要求重新声明 T 的类型。我只想让 Foo 告诉 Bar 它是什么。这可能吗?