首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在c# 4.0中,什么时候应该使用动态关键字?

在c# 4.0中,什么时候应该使用动态关键字?
EN

Stack Overflow用户
提问于 2010-04-20 20:10:30
回答 7查看 32.6K关注 0票数 66

什么时候应该在c# 4.0?.......Any中使用动态关键字在c# 4.0中使用动态关键字是一个很好的例子,它解释了动态关键字的用法...

EN

回答 7

Stack Overflow用户

发布于 2010-04-20 20:50:08

当不使用Dynamic是痛苦的时,应该只使用。例如在MS Office库中。在所有其他情况下,应该避免这种情况,因为编译类型检查是有益的。下面是使用动态的好情况。

  1. 从Silverlight.
  2. COM互操作中调用javascript方法。
  3. 可能在不创建自定义类的情况下读取Xml、Json。
票数 46
EN

Stack Overflow用户

发布于 2015-01-15 01:11:38

这个怎么样?我一直在寻找的东西,我想知道为什么没有‘动态’就这么难做到。

代码语言:javascript
运行
复制
interface ISomeData {}
class SomeActualData : ISomeData {}
class SomeOtherData : ISomeData {}

interface ISomeInterface
{
    void DoSomething(ISomeData data);
}

class SomeImplementation : ISomeInterface
{
    public void DoSomething(ISomeData data)
    {
        dynamic specificData = data;
        HandleThis( specificData );
    }
    private void HandleThis(SomeActualData data)
    { /* ... */ }
    private void HandleThis(SomeOtherData data)
    { /* ... */ }

}

如果没有采用具体类型的重载方法,您只需捕获Runtime异常并按您希望的方式进行处理即可。

不使用dynamic的等价物是:

代码语言:javascript
运行
复制
    public void DoSomething(ISomeData data)
    {
        if(data is SomeActualData)
          HandleThis( (SomeActualData) data);
        else if(data is SomeOtherData)
          HandleThis( (SomeOtherData) data);
        ...
        else
         throw new SomeRuntimeException();
    }
票数 17
EN

Stack Overflow用户

发布于 2017-01-23 17:10:31

正如微软在here中所描述的,动态可以使设计不佳的外部库更易于使用:微软提供了Microsoft.Office.Interop.Excel程序集的示例。使用dynamic,您可以在使用此程序集时避免许多恼人的显式强制转换。

此外,与@user2415376相反,它绝对不是一种处理接口的方法,因为从语言诞生之初我们就已经实现了多态性!

您可以使用

代码语言:javascript
运行
复制
  ISomeData specificData = data;

而不是

代码语言:javascript
运行
复制
dynamic specificData = data;

此外,它将确保您不会传递错误类型的数据对象。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2674906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档