动态与强类型元素

Nia*_*ker 1 c# umbraco asp.net-mvc-3

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

我从来没有真正给出太多理由,在线搜索似乎很清楚它更容易遵循和调试集类型变量,但我很困惑在函数中使用它.

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

Chr*_*att 6

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

首先,可能最重要的是编译时错误.使用像Python这样的动态语言,没有迹象表明在应用程序运行之前你已经使用了错误的类型并且你得到了运行时异常.使用强类型语言,应用程序甚至不会构建,因此您通常不会在代码中使用timebombs.

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

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

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

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