繁体   English   中英

动态元素与强类型元素

[英]Dynamic vs strongly typed elements

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

从来没有真正给过我太多的理由,而且在线搜索似乎很容易理解和调试集合类型变量,但是我对在函数中使用它感到困惑。

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

我主要来自PHP和Python,但大约3年前切换到C#。 改用像C#这样的强类型语言进行初级开发无疑是一条学习曲线。 有时,它可能会感到过于严格,特别是与C#的非常严格的继承结合使用时。 但是,强类型语言可以为您带来很多好处。

首先,也许最重要的是编译时错误。 对于像Python这样的动态语言,没有迹象表明您使用了错误的类型,直到应用程序运行并获得运行时异常。 使用强类型语言,该应用程序甚至无法生成,因此您通常不会在代码中遇到定时炸弹的麻烦。

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

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

也就是说,C#并非都是强类型的。 也就是说,有一个有点可恶的dynamic关键字,该关键字经常被滥用,MVC几乎鼓励在诸如ViewBag东西中使用动态。 尽管dynamic可以占有一席之地,但我建议您尽可能避免使用它,因为您实际上已经放弃了使用强类型语言的所有好处。

还有泛型的概念。 您可能在使用泛型时甚至没有意识到它,但是如果您在编程中感到过度受限,则可能应该更多地研究它们,并学习如何真正利用它们带来的功能。 这有点像具有动态类型,但是它仍在编译时设置,因此您不会损失任何带来的好处。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM