从Visual Basic中的结构中的函数返回值

时间:2018-12-20 20:52:43

标签: 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 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

现在,我对函数的理解是,一旦从函数返回任何内容,函数的执行就会在返回值的确切行停止,而在执行完之后就什么也没有。因此,应该添加实部并退出功能。

我知道我在这里错过了一件重要的事情,如果有人可以向我解释这一点,我将不胜感激。

1 个答案:

答案 0 :(得分:3)

通过这种设置方式,这些函数在每次调用它们时都会创建一个新的空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指出的那样,我不确定为什么要将它作为函数而不是子函数。现在,以设置方式使用它需要您执行类似的操作来获取加/减值,因为您需要捕获返回的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())