假设有下面一个函数Calc,它的功能是计算n的阶乘:
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
显然这个函数是错误的,因为它忘了返回计算结果了。但是,它能通过编译!!!
如果这个程序是用C++或C#写的,编译将给出警告甚至错误。这个特性能让你马上发现问题。
VB.NET则不然,它将让你在运行时给出错误结果,而这个错误不一定会让你发现,即使发现,也需要花相当的时间去找出这个问题。我曾经吃了这个亏,后来就改用C#,这些问题就通通避免了。
很显然,这是VB.NET的一个重大缺陷。
***
不过,这一些缺点,在VB2005都完全得到了改进.它不仅保留了动态语言特性和优点,也增加了静态语言的代码静态分析.这样我们完全可以根据需要进行设置:
(下图的选项中设置为warnning的项,在VB2005以前基本上都是不具备的,用惯C++的人肯定明白这些选项是如何的重要)
![VB2005_CompileSetting.PNG](https://i-blog.csdnimg.cn/blog_migrate/1012223e4cdb5ec85aa3026f757ba9e6.png)