如何在If语句中声明时将变量的范围限制为函数

时间:2015-05-15 12:18:56

标签: vb.net scope

我需要将变量的范围限制为它所驻留的函数,但是我需要在if语句中声明它,因为它的类型将根据需要而改变。我在VB.NET中工作

Public Function CourseDataTable()
    If RadioCourses.Checked Then
        Dim SearchBy As New classSearchCourses
    ElseIf RadioAttendees.Checked Then
        Dim SearchBy As New classSearchAttendees
    End If

显而易见的问题是变量不会在if语句之外持久存在。我想限制这个变量的范围,因为a,它用于其他地方和b,内存泄漏,类很可能最终保存整个SQL表,我不希望它在不需要时持久存在。 我不能在这里使用继承或多态,因为我正在使用遗留系统。

这可能是一个返工(我正在努力想到一种明显接近它的不同方式),因为我在MSDN中找不到允许程序范围的任何内容,但在声明时忽略了任何其他块。

2 个答案:

答案 0 :(得分:4)

仍然可以在遗留系统中使用多态。你可以做的是找到两者之间必须存在的共同功能,以便你甚至想要重用同一个变量。然后,您可以为每个遗留类创建包装类。包装器类将实现公共接口,并简单地调用底层的遗留实现。然后,您只需向该公共接口声明一个变量,并在if语句中创建相应的包装器类实例。

编辑如果你能够修改遗留​​类,那么更简单的解决方案就是创建一个两个遗留类都可以实现的通用接口。这将为您提供所需的多态功能,而无需包装类。 VB.Net甚至提供了以接口方法仅暴露接口方法的方式实现接口的能力。为此,您只需将接口实现方法标记为Private。

答案 1 :(得分:2)

您可以将SearchBy声明为Object,然后执行类似

的操作
        Dim searchBy As Object
        If RadioCourses.Checked Then
            searchBy = New classSearchCourses
        ElseIf RadioAttendees.Checked Then
            searchBy = New classSearchAttendees
        End If

        If searchBy.GetType() Is GetType(classSearchCourses) Then
            'Do something
        ElseIf searchBy.GetType() Is GetType(classSearchAttendees) Then
            'Do something else
        End If

这仍然是继承,因为大部分内容都继承自System.Object,但是如果出于某种原因你不能这样做,它会保存你声明你自己的新基类