动态与强类型元素

时间:2017-02-21 14:51:30

标签: c# asp.net-mvc-3 umbraco

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

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

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

3 个答案:

答案 0 :(得分:6)

我来自主要的PHP和Python背景,但大约3年前切换到C#。以C#这样的强类型语言切换到初级开发无疑是一个学习曲线。有时候它会感觉过于严格,特别是当与C#非常严格的继承相结合时。但是,强类型语言会为您带来许多好处。

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

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

第三,强类型语言鼓励良好的编程实践。虽然它可能会让人觉得有些限制,但强类型语言会强制构建一个通常在动态语言中缺乏的代码。当然,这并不是说用动态语言编写好的代码是不可能的,但这确实意味着当开发人员不关心花时间或注意细节时,他们应该更多损害可以用动态语言完成,而不是强类型语言。

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

还有泛型的概念。你可能在没有意识到的情况下使用泛型,但是如果你在编程中感觉受到过度限制,你应该更多地研究它们并学习如何真正利用它们带来的力量。这有点像动态类型,但它仍然在编译时设置,所以你不会失去任何带来的好处。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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