C# 如何将类FooObject转换为类BarObject,这两个类都实现了接口IOObject?
我有两个实现相同接口的类。但不知怎的,我不能把它们从一个扔到另一个 下面是一个例子:C# 如何将类FooObject转换为类BarObject,这两个类都实现了接口IOObject?,c#,interface,casting,implementation,C#,Interface,Casting,Implementation,我有两个实现相同接口的类。但不知怎的,我不能把它们从一个扔到另一个 下面是一个例子: public interface IObject { // ... } public class FooObject : IObject { // ... } public class BarObject : IObject { // ... } - 如果我这样做,VS会将其标记为无法将类型“FooObject”转换为“BarObject” var foo = new FooObj
public interface IObject {
// ...
}
public class FooObject : IObject {
// ...
}
public class BarObject : IObject {
// ...
}
-
如果我这样做,VS会将其标记为无法将类型“FooObject”转换为“BarObject”
var foo = new FooObject();
var bar = (BarObject)foo; // Build error
-
如果我这样做,则没有生成错误,但调用时,它会抛出System.InvalidCastException:无法将类型为“foooobject”的对象强制转换为“BarObject”。
var foo = new FooObject();
var bar = (BarObject)(IObject)foo; // No build error, but InvalidCastException gets thrown
-
那么,如何将接口(ioobject
)的一个实现(FooObject
)强制转换/解析/转换为同一接口的另一个实现(BarObject
)
解决方案:
我通过创建显式转换运算符修复了此问题:
public class FooObject {
// ...
public static explicit operator BarObject(FooObject fooObject)
{
// ...
}
}
多亏了。你不能。
Cat
和Dog
都可以实现IAnimal
,但不能将一个转换为另一个-至少在不编写隐式或显式转换运算符的情况下不能。你到底想解决什么问题?@CodeCaster,我创建了一个公共静态显式操作符BarObject(foooobject foooobject)
,成功了。谢谢我只是在这里提出了一个类似的建议:。如果你使用这个扩展方法,你可能是对的:@Olivier nice,这就是那个复制品丢失的地方。