显然,无论GetADynamicThing()返回的对象类型如何,以下内容在c#4.0中都有效
dynamic d = GetADynamicThing();
d.Foo();
Run Code Online (Sandbox Code Playgroud)
如果d的运行时类型不包含方法Foo(),则抛出RunTimeBinderException.
是否有一种简单的方法可以确定D上是否存在Foo()?
否则,我们会坚持做旧学校对象的反思,或依靠try-catch.不确定我喜欢哪种方法.
更新:所以我们目前有3个选项:
3号似乎是动态的目标用法,在COM情况下很好.我之所以问这个问题的原因是为了回应做这样的事情,即使用一些任意创建的对象的方法.这似乎是使用动态的错误情况.
动态类型并不是System.Object的替代品.如果你不知道返回什么,那么使用System.Object或API中的具体接口仍然比使用动态更好,即使在C#4中也是如此.
如果您基本上知道要返回的内容,那么动态非常有用.您应该将缺少的成员(即:Foo)视为例外情况,在这种情况下,异常是处理此问题的合理方法.
| 归档时间: |
|
| 查看次数: |
3113 次 |
| 最近记录: |