因此,作为这个全球金融市场的直接结果,我明天将开始作为VB.net开发人员的新工作。到目前为止,我一直在开发C#(java,vb6,sql,tibco等等)
所以问题是这个,有什么需要注意的,有没有人对编写好的vb.net代码有任何好的建议?
(关于应对薪水/潜在客户的任何其他建议都是欢迎但不是必不可少的; - ))
只是一个快速更新,公司似乎非常好,目前的代码库看起来质量非常高。我开始适应VB的做事方式(虽然不能阻止自己添加分号!)。再次感谢大家的有益建议。
答案 0 :(得分:25)
在VB中最重要的事情,在我(绝对不谦虚)的意见中,始终使用Option Strict On
(除了,基于每个文件,非-strict键入是有意义的,例如因为您使用PIA与MS Office进行互操作)并在VS选项中启用它。
Option Strict On
与Option Explicit On
一起提供与C#大致相同的行为。切换后,它会在编译时删除大量类型检查,并允许在完全不相关的类型之间进行虚假,不必要和难以调试的隐式转换。
Option Strict Off
是有意义的。 Option Explicit Off
从不有意义。这是愚蠢的(主要是为了兼容VB6)。
=
与Is
需要注意的另一件事是:平等与参考测试。在C#中,您使用==
。在VB中,你有不同的运算符:
Dim StringA = "Hello"
Dim StringB = Console.ReadLine()
Dim EqualContent = StringA = StringB
Dim EqualRefs = StringA Is StringB
现在,根据用户输入,EqualContent
可能是True
; EqualRefs
始终为False
。请注意,Is
在语义上等同于以下C#代码(通常没有人写过):
var equalRefs = object.ReferenceEquals(stringA, stringB);
我实际上认为这是VB相对于C#的优势,但很少需要。与Is
相反的是IsNot
。这里要注意的另一件事是通过=
运算符的字符串比较实际上调用了VB运行时方法:Microsoft.VisualBasic.CompilerServices.Operators.CompareString
。
这考虑了其他几个设置,尤其是Option Compare
设置,可能是Binary
(默认,C#中的行为)或Text
(不区分大小写的比较)。
CType
与DirectCast
和TryCast
在其他一些情况下也会调用VB运行时,其中一个特别是CType
,这是VB中的通用转换运算符。我倾向于避免使用运算符,我强烈建议任何人做同样的事情,支持其他更明确的转换。这样做的原因是CType
在应用时会尝试几种语义上非常不同的转换。这使得很难跟踪代码中究竟发生了什么,可能会引入输入错误。
首先,CType
允许解析数字的字符串。这是一个通过 NumberType
.Parse
操作更好地表达的概念,就像在C#中一样。
我建议使用CType
代替DirectCast
而不是C#强制转换,或TryCast
与C#的as
转换相同。
另一个问题。检查对象x
是否具有某种类型T
时,必须使用以下语法:
If TypeOf x Is T Then …
请注意,这不会调用普通的引用比较运算符Is
。相反,它使用自己的运算符构造TypeOf … Is …
。但是不能写TypeOf … IsNot …
。这可能是规格中的一个错误。
存在很多差异,一些有用(例如Select Case
语句中的差异)和一些较少(例如Like
运算符用于基本通配符匹配...只需使用正则表达式。)< / p>
与此有关的其他一些问题:
答案 1 :(得分:8)
只是一个小细节作为警告。如果在VB.NET中声明一个数组,括号之间的数字表示上限,而不是元素数:
Dim monthNames(11) As String
Console.Write(monthNames.Count)
输出为“12”。
不
Dim monthNames(12) as String
Console.Write(monthNames.Count)
输出为“13”。
我建议你阅读Kathleen Dollard撰写的这篇博文。
What a C# Coder Should Know Before They Write VB
她的第一个建议是:
1)克服尊重或退出 在你开始之前。 VB.NET很棒 语言。
答案 2 :(得分:3)
VB.Net是.Net语言,它与C#相同,但具有vb风格。 我4年前遇到的情况和你一样,我做的只是用vb.net写作,我很害怕,但是当我开始写作时,我发现我很好,它和C#一样, 就在前几行你会写“;”和“{}”,但几分钟后,你会感觉到它的正常。
所以我的建议是不要觉得你会写VB.Net,你会写.Net但新风格。
您可能需要了解非常简单的部分: 如何写一个函数 如何声明变量 如何创建活动
确保C#和VB.Net之间的差异不仅仅是语法,但你会很快得到它们。
还有一些转换器可以帮助您更快地编码:
答案 3 :(得分:3)
查看此链接;我相信它几乎是权威指南:http://msmvps.com/blogs/kathleen/archive/2008/07/25/what-a-c-coder-should-know-before-they-write-vb-updated.aspx
答案 4 :(得分:2)
当我进行类似的切换时,我发现这个小的并排比较特别有用:http://www.harding.edu/fmccown/vbnet_csharp_comparison.html
答案 5 :(得分:2)
应My namespace发出特别通知:
C#
这个术语在某种程度上是遗漏的,所以你可能会错过这个重要的工具。
Visual Basic中的My命名空间公开了使您能够轻松利用.NET Framework强大功能的属性和方法。 My命名空间简化了常见的编程问题,通常将困难的任务简化为单行代码。此外,My命名空间是完全可扩展的,因此您可以自定义My的行为并将新服务添加到其层次结构中以适应特定的应用程序需求。
提供对信息和常用功能的访问的三个中心My对象是My.Application Object,My.Computer Object和My.User Object。您可以使用这些对象分别访问与当前应用程序,安装应用程序的计算机或应用程序的当前用户相关的信息。
来自Performing Tasks with My.Application, My.Computer, and My.User的示例:
' Displays a message box that shows the full command line for the
' application.
Dim args As String = ""
For Each arg As String In My.Application.CommandLineArgs
args &= arg & " "
Next
MsgBox(args)
答案 6 :(得分:0)
当我从VB切换到C#时,我发现this引用很方便,我希望它反过来会有所帮助。所以这可能有助于你所经历的过渡的句法部分。肯定不是过渡中最困难的部分,但希望它可以提供帮助。
答案 7 :(得分:0)
+1 for option strict。
我从VB.Net转到C#,最初有点害怕我无法接受它。如果您了解.Net框架就可以了,只需将Google放在任何您不确定的语法上即可。
祝你好运。