当动态转换到接口时InvalidCastException

本文关键字:InvalidCastException 接口 动态 转换 | 更新日期: 2023-09-27 17:53:34

我在程序集中定义了一个接口,如下所示:

namespace HelloWorlder
{
    public interface IHelloWorld {
        string SayHello();
    }
}
在一个单独的程序集中,我有另一个类定义为:
using HelloWorlder;
public class HelloWorld : IHelloWorld {
    string IHelloWorld.SayHello() {
        return "Hello, world!";
    }
}

现在尝试从f#交互式调用这个,我得到一个无效的强制转换异常,这是试图使用这个DLL的代码:

#I __SOURCE_DIRECTORY__
#r "HelloWorlder.dll"
open System
open System.Reflection
open HelloWorlder


let asm = Assembly.LoadFrom(__SOURCE_DIRECTORY__ + "''HelloWorld.dll")
let hwIns = asm.CreateInstance("HelloWorld") :?> IHelloWorld
let res = hwIns.SayHello()

从我可以看到它应该工作,作为一个额外的预防措施,你会看到我已经显式地实现了接口IHelloWorld。我猜有一些东西,我错过了,但我不知道为什么它抛出一个cast异常。

当动态转换到接口时InvalidCastException

事实证明,我实际上必须打开对象而不是强制转换它,然后它工作得很好。

let hwIns = asm.CreateInstance("HelloWorld") |> unbox<IHelloWorld>

相关文章:
  • 没有找到相关文章