C# - 动态关键字和接口(interface)实现

标签 c# silverlight .net-4.0 dynamic-keyword

我假设这是不可能的,但在进一步挖掘之前有没有办法做这样的事情:

public void ProcessInterface(ISomeInterface obj) {}

//...

dynamic myDyn = GetDynamic<ISomeInterface>() 
ProcessInterface(myDyn);

我见过 post争论它,但听起来它不包括在内。

一点上下文:.Net 程序集通过 COM 公开 -> Silverlight 应用程序使用接口(interface)实现类。通过接口(interface)引用对象会很好。我真的不希望这是预期的......

最佳答案

不,dynamic 不会让类型假装实现接口(interface)(即使它通过dynamic 拥有所有方法)。将它传递给 ProcessInterface 本质上会带走 dynamic

dynamic 与实现对象一样依赖于调用 代码。更多,甚至。

不过,您可以制作一个使用鸭子类型的接口(interface)包装器:

class Foo : IBar {
    readonly dynamic duck;
    public Foo(dynamic duck) { this.duck = duck; }

    void IBar.SomeMethod(int arg) {
        duck.SomeMethod(arg);
    }
    string IBar.SomeOtherMethod() {
        return duck.SomeOtherMethod();
    }
}
interface IBar {
    void SomeMethod(int arg);
    string SomeOtherMethod();
}

关于C# - 动态关键字和接口(interface)实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2770487/

相关文章:

c# - 如何在 C# 中实现电影的年份?

c# - 在C#中,可能是Image.SaveAdd的一个bug,谁能帮我解决一下?

c# - WebRequest.RegisterPrefix() 放在哪里

silverlight - Silverlight 4 中的上下文菜单服务

c# - 如何从 Windows Server 2003 上的事件目录获取 tokenGroups?

c# - 将 XML 文档作为参数传递给 Nhibernate ICriteria?

silverlight - MVVM Silverlight 和页面导航

c# - .NET 中的时区问题

c# - 带有预共享字典的 .NET 二进制 XML

c# - UTF-8 在 C# 中用双引号编码字符串