【发布时间】:2016-04-04 10:40:53
【问题描述】:
使用impromptu-interface 时如何访问 Duck Typed 代理对象。考虑我的代码,该代码说明了我的示例,当我尝试将 Duck Typed Object 强制转换为代理对象时,我得到了 InvalidCastException:
using System;
using ImpromptuInterface;
namespace ConsoleApplication1
{
public class Duck
{
public string Says { get; set; }
public int GetNumberOfQuacksPerMinute()
{
return 42;
}
}
public interface IPondBird
{
string Says { get; set; }
}
class Program
{
static void Main(string[] args)
{
// Duck says Quack! Quack!! Quack!!!
var thing = new Duck { Says = "Quack! Quack!! Quack!!!" };
IPondBird myInterface = Impromptu.ActLike(thing);
// ...
// Later on, I want to get access to a proxied object, but I
// get a InvalidCastException here
Duck proxiedObject = (Duck) myInterface;
Console.WriteLine("Duck # quacks per minute: "
+ proxiedObject.GetNumberOfQuacksPerMinute());
}
}
}
异常如下:
发生“System.InvalidCastException”类型的未处理异常 在 ConsoleApplication1.exe 中
附加信息:无法转换类型的对象 'ActLike_IPondBird_c7dd53902ec74f01a3844d4789244ea3' 输入 'ConsoleApplication1.Duck'。
【问题讨论】:
-
您能否展示文档中使您相信这应该有效的部分?这里有一个误解,文档让我更容易向你解释。
-
看起来您可以使用
Impromptu.UndoActLike(myInterface)来取回原始(包装的)对象。 -
@PieterWitvoet 这也有效,谢谢!