使用动态vs接口作为参数的C#构造函数

Aar*_*ker 5 dynamic decoupling c#-4.0

为了在c#中创建干净的解耦代码,我希望得到一些关于使用动态参数来构造对象的反馈.通常我相信你会创建一个接口并使用接口作为合同,但是你必须为你所有的类创建接口,我觉得它们有点蹩脚......

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

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

    public Class1(dynamic obj)
    {
        Name = obj.Name;
        Description = obj.Description;
    }
}
Run Code Online (Sandbox Code Playgroud)

VS

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

    public Class1(IClass1 obj)
    {
        Name = obj.Name;
        Description = obj.Description;
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

界面优点:

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

优点dynamic:

  • 您不需要声明接口或实现它
  • 具有Name和Description属性的现有类可以使用而不进行任何更改
  • 如果匿名类型具有"名称"和"描述"属性,则可以在同一程序集中使用它们

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