Vb.net 在Visual Basic中从结构中的函数返回值

Vb.net 在Visual Basic中从结构中的函数返回值,vb.net,function,data-structures,procedure,Vb.net,Function,Data Structures,Procedure,我希望这篇文章的标题不要太乱。我正在复习上周的一些课程材料,关于这个特殊的结构和其中的加减函数,有一点我不理解: Structure ComNum Dim Re As Double Dim Im As Double Function add(ByVal br As ComNum) As ComNum add.Re = br.Re + Re add.Im = br.Im + Im End Function Function

我希望这篇文章的标题不要太乱。我正在复习上周的一些课程材料,关于这个特殊的结构和其中的加减函数,有一点我不理解:

  Structure ComNum
    Dim Re As Double
    Dim Im As Double
    Function add(ByVal br As ComNum) As ComNum
        add.Re = br.Re + Re
        add.Im = br.Im + Im
    End Function
    Function subt(ByVal br As ComNum) As ComNum
        subt.Re = br.Re - Re
        subt.Im = br.Im - Im
    End Function
End Structure

Sub Main()
    Dim a, b, c As ComNum

    a.Re = 2
    a.Im = 3
    b.Re = 4
    b.Im = 5

    c = a.add(b).add(b).subt(b)

    Console.WriteLine("The second number added twice and subtracted once from the first number gives {0}+{1}i", c.Re, c.Im)

End Sub
现在,我理解函数的方式是,一旦从它返回了任何东西,函数的执行就在返回值的那一行停止,执行之后什么也没有。因此,它应该添加真实部分并退出函数


我知道我这里缺少一个关键的东西,如果有人能给我解释一下,我将不胜感激。

按照这种设置方式,每次调用这些函数时,它们都会创建一个新的空ComNum结构(根据函数名命名为add或subt)。除非您提前手动返回它们,否则它将默认返回名为structure的函数

    Function add(ByVal br As ComNum) As ComNum
        add.Re = br.Re + Re
        add.Im = br.Im + Im
    End Function
基本上相当于:

    Dim add As New ComNum
    add.Re = br.Re + Re
    add.Im = br.Im + Im
    Return add
尽管像Lars指出的那样,我不确定为什么您希望它是一个函数而不是一个sub。按照您现在设置的方式使用它,需要您执行类似的操作来获取加法/减法值,因为您需要捕获返回的ComNum对象

    Dim a As New ComNum With {.Im = 1, .Re = 1}
    'Im = 6, Re = 6
    a = a.add(New ComNum With {.Im = 5, .Re = 5}) 
这样做对我来说更有意义

Structure ComNum
    Dim Re As Double
    Dim Im As Double
    Sub add(ByVal br As ComNum)
        Re += br.Re
        Im += br.Im
    End Sub
    Sub subt(ByVal br As ComNum)
        Re -= br.Re
        Im -= br.Im
    End Sub
End Structure
然后,您可以通过这种方式调用它来更新结构,而不必捕获返回的值

a.add(New ComNum With {.Im = 5, .Re = 5}) 
编辑:现在知道了更多关于如何执行该练习的信息,我建议对结构执行类似的操作:

    Public Overrides Function ToString() As String
        Return String.Format("Re: {0}  Im: {1}", Re, Im)
    End Function
然后可以像这样调用.ToString()方法。不过,只是一个想法

    Console.WriteLine("The second number added twice and subtracted once from the first number gives {0}", c.ToString())

很不清楚你到底在干什么。没有什么是提前退出函数。这看起来很像VB6语法。我“猜测”你希望这是一个空,而不是一个函数,
Re+=br.Re
,等等。我不知道。顺便说一句,我建议不要使用可变结构。他们往往很难推理。副本将在您不一定期望的时间制作。@Craig我会记住这一点,谢谢您。但这是学校里的一个特殊练习,所以必须是这样:)我在修改代码后设法自己弄明白了一切是如何工作的,但你帮了我大忙,为我指明了正确的方向。谢谢:)至于为什么要这样做,就像我在编辑开场白时说的,这是一个结构、函数和调用链接方面的练习。重点是在结构中定义这些操作,而不改变已经输入的数字以获得灵活性。很高兴我能提供帮助,您对该练习的描述在这种情况下是有意义的。在实际应用程序中,我可能会使用该结构的列表来计算加法/减法。但是家庭作业/学习应用程序的结构非常僵硬,所以它可以正常工作。我添加了一个可能重写.ToString()方法的编辑,这样您就可以调用c.ToString()而不是每次手动格式化输出。