需要解释VB.Net代码

时间:2015-04-18 16:53:54

标签: vb.net

在以下教程的示例代码中,我了解其中的大多数是如何工作的。但是有一些我不理解的事情。请帮助我理解其中一些角色的目的和目的。我将在下面解释我不理解的内容。

Module paramByref
Sub swap(ByRef x As Integer, ByRef y As Integer)
  Dim temp As Integer
  temp = x ' save the value of x 
  x = y    ' put y into x 
  y = temp 'put temp into y 
End Sub
Sub Main()
  ' local variable definition 
  Dim a As Integer = 100
  Dim b As Integer = 200
  Console.WriteLine("Before swap, value of a : {0}", a)
  Console.WriteLine("Before swap, value of b : {0}", b)
  ' calling a function to swap the values '
  swap(a, b)
  Console.WriteLine("After swap, value of a : {0}", a)
  Console.WriteLine("After swap, value of b : {0}", b)
  Console.ReadLine()
End Sub
End Module

我不明白为什么需要xytemp。为什么不保持ab的声明并交换值?

此外,在Console.WriteLine上,我了解{0}是第n个引用或索引位置,但逗号建议输出其他内容。它是说要在0索引中输出a的值吗?如果是这样,只能有一个零索引,为什么下一行引用零索引的值?或者我错了吗?非常感谢任何解释......请为这个新手愚蠢地回答你的问题。

3 个答案:

答案 0 :(得分:1)

xytemp的原因是为了演示如何进行交换。你的问题是

  

为什么不保持声明a和b并交换值

在这种情况下,你没有进行任何递增,确定你可以在之后说b = 100a = 200,但如果你这样做,就说一个循环并不断交换它们,如果你要做什么

a = b
b = a

你会a=100b=100,因为你将b = a的值设置为100,然后将其设置为相同的值,使其仍然为100.这就是' s为什么你需要临时值。

关于console.writeLine,你绝对正确它是索引第0个索引,所以在第一个例子中,它是a,但它可以在下一行重用,因为它是一个完全独立的行代码这些console.writeLines中的每一个都可以独立存在,因此这些值是逐行索引的

答案 1 :(得分:0)

你需要一个temp来存储第一个var中的值,这样当你用第二个var的值覆盖它时你就不会丢失它。一旦第二个var的值被转移到第一个var中,temp中存储的值(来自原始的第一个var)就可以转移到第二个var中(覆盖原始值)。

这是创建自定义排序例程时的常用方法,该例程将各个位置的值混洗并在数组中排名。

答案 2 :(得分:0)

ab是仅在方法Main()中可见的变量。无法从其他方法访问它们。另一方面,xytemp是仅在方法swap()中可见的变量。更准确地说,xy是方法的参数。关键字ByRef表示参数是对变量的引用。即当您致电swap(a, b)时,x成为对变量a的引用,y成为对变量b的引用。您可以使用与其他变量一样的引用。不同之处在于,当您更改x中的swap()时,a中的Main会相应更改。

Console.WriteLine()方法采用字符串参数和任意数量的附加参数。 {0}是这些附加参数列表的索引。例如。 Console.WriteLine("{0} {1} {2}", 100, 200, 300)会输出100 200 300。并Console.WriteLine("{2} {1} {0}", 100, 200, 300)会输出300 200 100