如何将FooObject类转换为均实现接口IObject的BarObject类?

时间:2019-03-07 15:30:20

标签: c# interface casting implementation

我有2个实现相同接口的类。但是以某种方式,我无法将它们从一个投射到另一个。

这是一个例子:

public interface IObject {
    // ...
}

public class FooObject : IObject {
    // ...
}

public class BarObject : IObject {
    // ...
}

-

如果我这样做,VS会将其标记为Cannot convert type 'FooObject' to 'BarObject'

var foo = new FooObject();
var bar = (BarObject)foo; // Build error

-

如果我这样做,就不会产生构建错误,但是在调用时,它会抛出System.InvalidCastException: Unable to cast object of type 'FooObject' to 'BarObject'.

var foo = new FooObject();
var bar = (BarObject)(IObject)foo; // No build error, but InvalidCastException gets thrown

-

那么,如何将接口(FooObject)的实现(IObject)转换/解析/转换为同一接口的另一个实现(BarObject)?

解决方案:

我通过创建一个显式转换运算符来解决此问题:

public class FooObject {
    // ...
    public static explicit operator BarObject(FooObject fooObject)
    {
        // ...
    }
}

感谢CodeCaster

0 个答案:

没有答案