Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET使用文字类型字符错误样式的优缺点_Vb.net_Types - Fatal编程技术网

VB.NET使用文字类型字符错误样式的优缺点

VB.NET使用文字类型字符错误样式的优缺点,vb.net,types,Vb.net,Types,在VB.NET中使用文字类型字符()是不是很糟糕,很老派?我和一个固执的同事讨论了一件事,结果是“这是旧风格,我不想再看到它了!” 我的背景是更多的技术和硬件相关的,我总是喜欢类型严格编程的优点,但我真的想到了OOP/VB世界中的优点和缺点。有人能帮我列出一些优点/缺点吗 [更新]示例用法: Dim i as Integer = 0I Dim d as Decimal = 2.4D 我从未见过“标识符类型字符”,所以我个人永远不会使用它。我经常看到“文字类型字符”和“十六进制/Oct”,在需要

在VB.NET中使用文字类型字符()是不是很糟糕,很老派?我和一个固执的同事讨论了一件事,结果是“这是旧风格,我不想再看到它了!”

我的背景是更多的技术和硬件相关的,我总是喜欢类型严格编程的优点,但我真的想到了OOP/VB世界中的优点和缺点。有人能帮我列出一些优点/缺点吗

[更新]示例用法:

Dim i as Integer = 0I
Dim d as Decimal = 2.4D
我从未见过“标识符类型字符”,所以我个人永远不会使用它。我经常看到“文字类型字符”和“十六进制/Oct”,在需要的时候使用它们,或者如果它能帮助其他人阅读代码,我看不出有任何问题

这有点毫无意义

    Dim i as Integer = 0I
但这是必要的

    Dim d As Decimal

    d = 13421773 / 134217728
    Console.WriteLine(d) ' Prints 0.100000001490116

    d = 13421773D / 134217728D
    Console.WriteLine(d) ' Prints 0.100000001490116119384765625

    Dim a As Char = "C" ' Compilation error with option strict on
    Dim b As Char = "C"c ' No error

遵循集团的编码标准也很重要。

我们这里有两个不同的功能:


类型字符是向后兼容的传统功能。有很多人(包括我自己)认为应该避免使用它们,但这是该语言的一个完全支持的功能(并且没有被标记为不推荐),所以这基本上是一个偏好和编码风格的问题

Dim myString$           ' old style
Dim myString As String  ' new style
请注意,在这里,“旧样式”表示“非常旧的样式”:即使是visualbasic的DOS前身,也已经支持“新样式”


文字类型字符另一方面,用于指定文字的类型。这是一个有用的功能:

' I explicitly want the first parameter to be a decimal, not a double.
' Without the type character, the assertion would fail.
Assert.AreEqual(3.0D, SomeMethodReturningADecimal())

如果没有文本类型字符,我们需要使用
CDec(3.0)
CChar(“;”)
,也就是说,我们需要在运行时转换这些值

在您的问题(变量初始化)中提到的示例中,仅当

  • 您需要字符或文本
  • 您希望使用类型推断
换句话说,以下三条语句产生完全相同的IL:

Dim s As Single = 1
Dim s As Single = 1.0F
Dim s = 1.0F
请注意,C#也有文字类型字符:

var myDecimal=3.0m;//这是十进制,不是双精度。

这是(非常)老派的做法,很难识别使用
Dim n%
vs
Dim rowCount As Int32声明的内容。最终基于观点,因为它是功能性的,我从未见过“标识符类型字符”,所以我个人永远不会使用它。我经常看到“文字类型字符”和“十六进制/Oct”,我看不出使用它们有任何问题。这些是荷花提到的文字类型字符,与链接顶部提到的标识符类型字符不同。如果需要十进制,而不是双精度(
6.00
)和整数(
6
),则有时需要使用文字限定符对于几种网络方法,都需要c。指定
UInt
也需要它们。我认为您的示例不是很好。如果只输入0,整数就可以了,第二个将十进制转换为双精度,这是一种不必要的转换。帮助编译器做出正确的决策或生成更好的诊断与让程序员看起来不理解语言的工作原理之间有很大的区别。像这样的代码只能从阅读代码的其他人那里得出后一个结论。这通常不是任何人想要给人留下的印象。这不是解决争端的正确场所,团队需要一个让每个人都同样不高兴的编码标准。我不认为第一句话是毫无意义的。只有当您接受编译器将文本0解释为整数0时,这才是毫无意义的。但是,如果编译器供应商更改了标准行为并将文本0解释为整数1,该怎么办?我想这会造成很多麻烦。。。(好吧,这很不现实,但我希望你理解我的意思)@sandkasten:我理解你的意思,我确实支持十进制=0D的Dim d,但是
0I
0.0R
是毫无意义的,因为语言规范保证没有小数部分和文字类型字符的数字文字始终是
Int32
Int64
(取决于大小)。带小数部分和双精度的数字也一样。你有什么好的来源吗?像MS网页或类似的东西?我相信这一点,我的同事是不会相信的。@sandkasten:问问你的同事他会如何称呼String.Split而不使用文字类型字符。记住,VS中的选项Strict default是关闭的,所以你可以像这样称呼它。Split(“.”…@sandkasten:True(不幸)。然而,如果你的同事不喜欢老式的VB,我希望他在每个新项目上做的第一件事就是将Option Strict设置为on。前后不一致的是(我也说过这一点)。但我想得越久,我相信这是在向风车倾斜。
Dim s As Single = 1
Dim s As Single = 1.0F
Dim s = 1.0F