通过长时间分析Microsoft.VisualBasic.dll我发现了一个重要的问题:首先,Visual Basic语言运行时是要依靠Microsoft.VisualBasic.dll这个运行库的,其中类型转换、字符串比较和异常处理更是直接依靠该运行库中的类型。所以,Visual Basic开发应用程序无法不引用这个运行库。但是,大量的迹象表明,Microsoft.VisualBasic.dll是用Visual Basic开发的,不但Visual Basic的总设计师承认了这一点,运行库中的很多代码也体现了这一点,比如大量运用可选参数,以及使用了C#无法生成的try filter特性。那么是怎么用Visual Basic开发运行库自身的呢?它总不能引用还没有开发出来的自己吧?
另外一件事,我发现C#不允许将普通函数声明为类型的名字,比如Form1中不允许出现
public void Form1()
这样的声明。为什么呢?怕和构造函数弄混吗?但是构造函数没有返回类型,这是不可能弄混的啊。我用Visual Basic生成了与类型名一样的函数,然后拿到C#中调用,发现他能够很好地处理这种情况。那为什么不允许自己声明成这样呢?Visual Basic就没有这样的问题,虽然Visual Basic将New指定为构造函数的名字,但是却可以声明叫做New但不是构造函数的函数,只要这样写就行了。
Public Sub [New]()
语言设计者的想法,有时候很难捉摸。