首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“动态”关键字和DLR是否将C#作为一种动态类型的语言推广给一等公民?

“动态”关键字和DLR是否将C#作为一种动态类型的语言推广给一等公民?
EN

Stack Overflow用户
提问于 2010-03-25 18:12:56
回答 2查看 282关注 0票数 0

我了解到C# 4.0中新的“动态”关键字方便了与动态.NET语言的交互,并且可以通过使用它而不是反射来帮助削减代码。因此,用法适用于非常特定的情况。

然而,我想知道的是,它是否会给C#带来其他动态语言所带来的所有动态好处,比如IronXXX语言?换句话说,用C#以动态语言风格编写整个应用程序是可能的吗?

如果有可能,会推荐还是不推荐?为什么,或者为什么不分别呢?

我是否可以在不切换到另一种语言的情况下获得动态语言的所有好处?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-25 18:18:45

我不会说C#是一流的动态语言,不。

首先,一些静态类型特性并不能很好地与动态类型配合使用。例如:

代码语言:javascript
复制
public void ShowListCount(IList foo)
{
    dynamic d = foo;
    Console.WriteLine(d.Count);
}

这看起来应该总是有效的,因为IList公开了Count,对吧?试着这样做:

代码语言:javascript
复制
ShowListCount(new int[10]);

真棒。数组使用显式接口实现来实现IList.Count,因此当动态类型将对象“视为”数组时,它看起来不会看到Count属性。这样的陷阱有很多。

此外,如果您想在C#中实现动态行为(即动态调用),则没有显式的语言支持。您可以从DynamicObject派生或自己实现IDynamicMetaObjectProvider,但是该语言中的任何内容都不会对您有所帮助。

我认为C#中的动态类型主要用于与现有的动态平台(如IronPython或弱类型的COM )进行互操作。在一些地方,它在纯C#中是有用的,但它们相对较少。

基本上,C#仍然是一种非常明显的语言,它的设计考虑了静态类型。有能力仔细地在你想要的地方使用动态类型是很好的,但是如果你想在你的代码库的一个区域广泛使用动态类型,我建议用IronPython编写这部分代码,然后从C#调用它。

票数 5
EN

Stack Overflow用户

发布于 2010-03-25 18:15:25

虽然dynamic关键字肯定会使C#更接近动态世界,但它不会使其成为一种动态语言,因此它不会具有动态语言的优点,例如在运行时向现有类型添加方法,...

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

https://stackoverflow.com/questions/2514585

复制
相关文章

相似问题

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