动态与强类型元素

Dynamic vs strongly typed elements

我是一名 Web 开发人员,目前正在使用 mvc3 razor 和 Umbraco 创建 Web 应用程序。我从事这项工作的时间不长,并且已经从使用动态元素转向使用强类型元素以遵循标准。

我从来没有真正得到太多的理由,在线搜索似乎很清楚它更容易跟踪和调试集合类型变量,但我对在函数中使用它感到困惑。

例如,在使用 Umbraco Content 时,我现在已切换到 1Umbraco.TypedContent1。我猜它 returns 是一个强类型变量,但除了调试之外还有其他好处吗?

我主要来自 PHP 和 Python 背景,但大约 3 年前转向 C#。转向使用像 C# 这样的强类型语言进行初级开发无疑是一个学习曲线。有时它会让人觉得过于严格,尤其是与 C# 非常严格的继承相结合时。但是,强类型语言可以为您带来很多好处。

首先,可能最重要的是编译时错误。对于像 Python 这样的动态语言,在应用程序为 运行 并且出现运行时异常之前,没有迹象表明您使用了错误的类型。使用强类型语言,应用程序甚至不会构建,因此您通常不会在代码中加入定时炸弹。

其次,强类型语言可以高度优化。通过确保每个事物始终是特定类型,编译器可以优化内存分配和实际编译的汇编代码。

第三,强类型语言鼓励良好的编程习惯。虽然感觉有些限制,但强类型语言会强制您的代码采用动态语言通常缺乏的结构。当然,这并不是说不可能用动态语言编写好的代码,但这确实意味着当开发人员不关心他们应该花时间或关注细节时,使用动态语言可能会造成更大的损害而不是强类型的。

也就是说,C# 并非都是强类型的。也就是说,有些令人讨厌的 dynamic 关键字经常被滥用,而 MVC 几乎鼓励使用 ViewBag 之类的动态。虽然 dynamic 可以占有一席之地,但我建议尽可能避免使用它,因为您实际上放弃了使用强类型语言工作的所有好处。

还有泛型的概念。您可能在没有意识到的情况下使用了泛型,但如果您觉得自己的编程受到过度限制,您可能应该更多地研究它们并了解如何真正利用它们带来的强大功能。这有点像动态类型,但它仍然是在编译时设置的,因此您不会失去任何带来的好处。

除了 Chris 提到的内容之外,还有一个性能优势,因为 Umbraco 中的动态 API 比强类型的慢。

此外,Umbraco v8 中将删除动态类型:http://issues.umbraco.org/issue/U4-8626