我已经准备好了Ruby通过检查是否存在满足接口的方法/属性来强制执行动态类型的接口的方法。
这总体上比使用接口更好的设计原则是什么?有什么利弊。例如,您可以在C#中实现相同的概念,但我不确定它是否具有相同的值,
public class Foo
{
public Foo(dynamic _obj)
{
MethodInfo[] methods= _obj.GetType().GetMethods();
if (!methods.Any(x => x.Name == "SomeRequiredMethod")
{
throw new ArgumentException("Object does not meet interface requirements.");
}
}
// proceed with functionality that requires the method
}
当然,你可以扩展它来检查更多的名称,如签名,返回类型等。
思想?
答案 0 :(得分:1)
我可以看到这种方法存在的几个主要问题:
除了非常具体的需求外,我看不出任何优势......
C#被设计为一种静态的强类型语言,即使它现在具有一些动态功能,但只有在没有强类型替换时才能使用它们。
如果您确实需要动态使用该对象,请不要手动检查成员:相反,将代码放在try块中,并捕获在您调用的成员丢失时将发生的RuntimeBinderException
。