公共职能与公共子

时间:2017-05-07 21:58:34

标签: vb.net oop

我写了一个简单的程序来计算线性序列中的前5个数字。该程序最初是顺序的,涉及Main()中的sub以执行计算。然而,作为编码的相对初学者,我正在努力发展我对面向对象编程的理解,因此,作为一项挑战,我决定相应地重新编写程序。正如您将从下面的代码中看到的那样,我遇到了一个小难题,我希望你们中的一些人能够帮助我。

通过使用public sub,我可以通过在Main()中创建类的新实例并调用GetSequence来执行所需的任务......没有问题。但是,我不喜欢在类中使用Console.Write行的想法。如果我错了,请纠正我,但这不会否定创建类的真正目的,因为它删除了它的动态功能吗?

因此,作为替代方案,我尝试在公共函数中执行相同的计算,但不幸的是,在for循环中无法识别返回值。我确信有一种方法可以解决这个问题...我错过了一些明显的东西,但我无法看到它。

对此的任何帮助,一如既往,非常感谢。

    Public Class Sequence
    Public Property a As Integer
    Public Property b As Integer

    'Using Public Sub does the job, but it means using a 
    'Console.Write within the Sequence class, which I'm
    'not too happy about.

    Public Sub GetSequence()

    For n = 1 To 5
        Console.Write("{0}, ", a * n + b)
    Next
    End Sub

    'I'd prefer to use a Public Function, but how do I 
    'return the value of the function through each iteration
    'of the 'for' loop?

    Public Function GetSequence(ByVal a As Integer, ByVal b As Integer)

        For n = 0 To 5
            Return a * n + b
        Next
    End Function

    Public Sub New(ByVal a As Integer, ByVal b As Integer)
        Me.a = a
        Me.b = b
    End Sub

    End Class

1 个答案:

答案 0 :(得分:0)

对于这个小例子,你可以创建一个字符串并重复追加它(同时确保声明函数的返回类型 - 在项目范围内启用Option Strict):

Public Function GetSequence(a As Integer, b As Integer) As String
    Dim result As String = ""

    For n = 0 To 5
        result &= (a * n + b) & ", "
    Next

    Return result
End Function

LINQ更好,但可能比你现在想要的更先进。

Public Function GetSequence(a As Integer, b As Integer) As String
    Return String.Join(
        ", ",
        From n In Enumerable.Range(0, 6) Select (a * n + b).ToString()
    )
End Function