利用Impromptu实现duck typing的封装

Impromptu是一个动态生成代码实现接口的库,可以非常方便我们实现DuckType编程:

    public interface IUser
    {
        string Name { get; set; }
        int Age { get; set; }
        string Address { get; set; }
    }


    var obj = new { Name = "jone", Age = 28 };
    IUser user = Impromptu.ActLike<IUser>(obj);

    Console.WriteLine(user.Name);

其原理是内部用Emit来动态生成了一个实现该接口的对象,从而实现接口的封装。利用这个特性,我们可以把Impromptu和ExpandoObject结合使用,从而非常方便的动态实现接口。

    var user = Impromptu.ActLike<IUser>(new ExpandoObject());
    user.Name = "jone";
    Console.WriteLine(user.Name);

原文地址:https://www.cnblogs.com/TianFang/p/3516535.html