为了在c#中创建干净的解耦代码,我希望获得有关使用动态参数构造对象的一些反馈。通常,我相信您会创建一个接口并将该接口用作合同,但是随后您必须为所有类创建接口,我认为这有点棘手...

所以,我的问题是做这样的事情的利弊是什么:

class Class1
{
    public string Description { get; set; }
    public string Name { get; set; }

    public Class1(dynamic obj)
    {
        Name = obj.Name;
        Description = obj.Description;
    }
}




class Class1
{
    public string Description { get; set; }
    public string Name { get; set; }

    public Class1(IClass1 obj)
    {
        Name = obj.Name;
        Description = obj.Description;
    }
}

最佳答案

界面的优点:


编译器会告诉您是否使用了错误的参数
构造函数的签名告诉您参数有什么要求


dynamic的优点:


您无需声明或实现接口
具有Name和Description属性的现有类可以直接使用
如果匿名类型具有Name和Description属性,则可以在同一程序集中使用它们


我个人通常将C#用作静态类型的语言,除非我与自然动态的事物进行交互(例如,在其他情况下我将使用反射或调用COM或DLR)...但是我可以看到在某些情况下这可能有用。只是不要过度做:)

08-06 04:43