是否可以仅使用C#的动态部分创建整个应用程序?

WeN*_*ers 13 c#

我对此感到相当顽皮,所以请不要认为我会认真尝试这一点,因为我从痛苦的经验中了解到静态类型检查系统的优势.

但是,至于一个概念,是否有可能以完全动态的方式基本上做C#,将静态类型检查器抛到一边并说"呃,你这么老式!".

我最近有过IronPython和F#的丰富经验,但我觉得在家里使用的是基于C语言的.

在动力学的道路上,C#能走多远?我最近写了一个XML到ExpandoObject解析器,这很棒,感觉就像是javascript原型.

动态的东西是如何优化的,它是否像NodeJs和CPython这样的一些真正的动态编程语言环境一样快?

Eri*_*ert 14

是否有可能以完全动态的方式基本上做C#?

当然,为什么不呢?只需将所有内容键入"动态"即可.

我最近有过IronPython和F#的丰富经验

我注意到F#不是动态类型语言; 它是一种隐式类型的静态类型语言.仅仅因为你没有看到类型检查并不意味着它不存在.

动态的东西有多优化?

它的速度非常优化,但内存使用和代码大小都很大.我们在每个呼叫站点上构建一个缓存.第二次你打一个呼叫网站它应该非常快,但你支付了内存成本.

它是否像NodeJs和CPython这样的一些真正的动态编程语言环境一样快?

尝试两者,测量它们,然后你就会知道.

  • @WeNeedAnswers:C#中动态功能的目的是实现与语言(IronPython),运行时环境(JavaScript/HTML)和遗留对象模型(Office)的更好互操作,假设调用者可以进行动态调用.C#首先是静态类型语言,我们打算保持这种方式."动态"功能是专门设计的,因此您可以狭隘地使用它,而不会出现运行时类型检查感染您程序其余部分的疾病. (3认同)

Jon*_*nna 5

差不多.当然,在您与需要特定类型的其他代码(包括FCL)进行交互的任何时候,您都必须转换为期望的类型.但如果你真的看好这个,你可以创建一些方法,如:

public static object IntegerAdd(object x, object y)
{
  return Convert.ToInt32(x) + Convert.ToInt32(y);
}
Run Code Online (Sandbox Code Playgroud)

现在从你的代码的其余部分开始,有一些静态类型的事实需要永远不会让你心烦意乱!

我最近有过IronPython和F#的丰富经验,

F#有点像真正大量使用var真正大量使用类型推断,而不是像使用dynamic和后期绑定一样.一些C#代码(特别是大量使用linq)在没有单一显式声明类型的情况下做了很多事情并不是很少见,但要通过和通过静态类型,这是一个更接近的比较.

在动力学的道路上,C#能走多远?我最近写了一个XML到ExpandoObject解析器,这很棒,感觉就像是javascript原型.

如果你写这篇文章是因为你喜欢尝试这种方法,那就太棒了.

如果你写它是因为你需要它给的东西,那么也很棒.

如果你写它是因为你需要它给出的东西,你喜欢尝试这种方法,那么血腥辉煌!你还能在工作中要求什么?

如果你用它来回避C#对javascript优势的优势,那么我建议谨慎.从静态打字到"老式",我们现在还有很长的路要走.这两种方法都有其优势.我不是说要外交,我真的认为他们这样做.C#提供两者的混合意味着它可以从动态类型的一些优势中受益,尽管通常是强类型语言.这是一种富有表现力和高效率的组合,并且不需要单腿射击,因为你更喜欢另一条腿.