无返回功能 - 该功能如何工作?

Ela*_*hez 3 vb.net

我正在研究一个旧的VB项目,我正在将其重写为C#.

我有几行不符合我对功能的了解.我已经读过MSDN,据我所知,函数必须有一个Return或一个Exit,或者如果没有(没有意义,有程序)你可以发送数据ByRef.

这个函数没有这些,但它仍然应该做某事 - 如果不是我不认为程序会起作用,但确实如此.

它看起来像是在调用自己但是过载; 但我不知道,这对我来说太奇怪了.

功能本身:

Private Function f(ByVal numero As Double) As String
    Dim intermedio As Double
    intermedio = numero * Factor 
    If intermedio - Int(intermedio) = 0 Then

        f = Format(intermedio, "0")
    Else
        f = Format(intermedio, "###0.0######")
    End If
    'f = Format(intermedio, "0.00000E+000")
    f = Replace(f, ",", ".")
    'f = Str(numero)
End Function
Run Code Online (Sandbox Code Playgroud)

变量因子在代码中的其他位置定义,它是:

double Factor = 1;
Run Code Online (Sandbox Code Playgroud)

对该函数的调用:

For Y = 0 To MaxY - 1
    X0 = X
    X1 = X + 1
    Y0 = Y
    Y1 = Y + 1
    Z00 = a(X0, Y0)
    Z01 = a(X0, Y1)
    Z10 = a(X1, Y0)
    Z11 = a(X1, Y1)
    Normal(X1 - X0, Y1 - Y0, Z11 - Z00, X1 - X0, 0, Z10 - Z00)

    objWriter.WriteLine("  facet normal " & f(i) & " " & f(j) & " " & f(k))
    objWriter.WriteLine("    outer loop")
    objWriter.WriteLine("      vertex " & f(X) & " " & f(Y) & " " & f(a(X, Y)))
    objWriter.WriteLine("      vertex " & f(X + 1) & " " & f(Y + 1) & " " & f(a(X + 1, Y + 1)))
    objWriter.WriteLine("      vertex " & f(X + 1) & " " & f(Y) & " " & f(a(X + 1, Y)))
    objWriter.WriteLine("    endloop")
    objWriter.WriteLine("  endfacet")

    Normal(0, Y1 - Y0, Z01 - Z00, X1 - X0, Y1 - Y0, Z11 - Z00)

    objWriter.WriteLine("  facet normal " & f(i) & " " & f(j) & " " & f(k))
    objWriter.WriteLine("    outer loop")
    objWriter.WriteLine("      vertex " & f(X) & " " & f(Y) & " " & f(a(X, Y)))
    objWriter.WriteLine("      vertex " & f(X) & " " & f(Y + 1) & " " & f(a(X, Y + 1)))
    objWriter.WriteLine("      vertex " & f(X + 1) & " " & f(Y + 1) & " " & f(a(X + 1, Y + 1)))
    objWriter.WriteLine("    endloop")
    objWriter.WriteLine("  endfacet")

Next Y
Run Code Online (Sandbox Code Playgroud)

Jam*_*rpe 8

在Visual Basic中,函数本身的名称将成为您可以在函数中使用的变量.在函数结束时,除非使用显式Return语句,否则将其中剩余的任何内容用作返回值.

在您的情况下,f始终使用.

引用MSDN:

退出功能返回语句引起从立即退出函数过程.任何数量的Exit FunctionReturn语句都可以出现在过程中的任何位置,您可以混合使用Exit FunctionReturn语句.

如果使用Exit Function而不为name指定值,则该过程将返回在returntype中指定的数据类型的默认值.如果未指定returntype,则过程返回Nothing,这是Object的默认值.