Vb.net VisualBasic打字和铸造问题

Vb.net VisualBasic打字和铸造问题,vb.net,vb6,casting,typing,Vb.net,Vb6,Casting,Typing,我刚开始使用Visual Basic进行开发,但在C#/C/C++/JAVA/Haskell和其他一些方面有很多经验 我之所以要维护代码并查找类型声明看起来很懒的代码示例,有什么原因吗?我见过无数只作为字符串类型使用的字符串,它们被声明为对象。在VB.NET的面向对象特性出现之前,是否有必要确保方法可以接受多种类型?为什么会有人这样做?猜猜看……懒惰和旧的VB6习惯正在被继承。在VB6中,有一种变体可以接受各种类型,它的使用应该谨慎小心。当.Net问世时,唯一的转换(除了大量修改代码外)是使用o

我刚开始使用Visual Basic进行开发,但在C#/C/C++/JAVA/Haskell和其他一些方面有很多经验


我之所以要维护代码并查找类型声明看起来很懒的代码示例,有什么原因吗?我见过无数只作为字符串类型使用的字符串,它们被声明为对象。在VB.NET的面向对象特性出现之前,是否有必要确保方法可以接受多种类型?为什么会有人这样做?

猜猜看……懒惰和旧的VB6习惯正在被继承。

在VB6中,有一种变体可以接受各种类型,它的使用应该谨慎小心。当.Net问世时,唯一的转换(除了大量修改代码外)是使用object作为类型

如果代码需要灵活性(如您所述)以使一个方法能够接受多种类型,我肯定会称之为遗留效应或VB6的代码转换效应


然而,如果您看到的是声明为对象的字符串类型的代码,那么这远比懒惰和VB6遗留问题糟糕!这听起来像是糟糕透顶的设计和缺乏谨慎。

一些VB6专家,例如“”,建议对所有变量使用“”。你可以称之为早期鸭子打字?!这是相当有争议的——我们中的许多人认为这是一个灾难的处方

但是肯定有很多这样的代码。在它出现之前,将其升级到VB.NET是非常困难的。VisualStudio升级工具每次看到变体都会惊慌失措。如果您真的需要使用有限的资源进行升级,我认为将所有变体更改为Object可能是最不坏的选择。显然,生成的代码将是可怕的


您可以逐步重构。在处理某个代码区域时,可以将声明更改为更具体的类型。

这样方法就可以接收多个成员,对吗?您不需要重载函数,而是创建一个方法,该方法接受as any,然后对其执行操作?关闭,但很可能不必指定实际的数据类型。让一个方法接受参数的可变列表与让一个方法接受任何类型的参数是不同的。听起来像是“任何类型的一个参数”场景,这相当于在VB6中使用变量。那么,您将如何调试这一大堆变量:等待运行时出现错误,并希望出现有用的错误?这种编码方式真的有效吗?回答得很好。嗯,我总是像躲避瘟疫一样避开这种方法,所以我想我不知道它是否真的有效!但如果它真的起作用,我会很惊讶。