Пожалуйста, обратите внимание на код ниже:VB.NET - Неправильные переменные экземпляра?
Public Class A
Public person1 As Person
End Class
Public Class B
Inherits A
Public Function CheckGender() As Boolean
If person1._Gender = "M" Then
CheckGender = True
End If
End Function
End Class
Public Class C
Inherits B
Public Function CheckAge() As Boolean
If person1._Age > 30 Then
CheckAge = True
End If
End Function
End Class
Public Class D
Inherits C
Public Sub SomeMethod()
Dim list As List(Of Person) = New List(Of Person)
Dim p1 As New Person("Ian", "M", 31)
Dim p2 As New Person("Susan", "F", 20)
Dim p3 As New Person("Mark", "M", 22)
list.Add(p1)
list.Add(p2)
list.Add(p3)
For Each Person As Person In list
person1 = Person
If CheckAge() And CheckGender() Then
'Do something
End If
Next
End Sub
Public Shared Sub Main()
Dim d As New D
d.SomeMethod()
End Sub
End Class
Public Class Person
Public _Name As String
Public _Gender As String
Public _Age As String
Public Sub New(ByVal Name As String, ByVal Gender As String, ByVal Age As Integer)
_Name = Name
_Gender = Gender
_Age = Age
End Sub
End Class
c.SomeMethod
петлю через три людей и делает две проверки: b.CheckGender
и c.CheckAge
. CheckGender
и CheckAge
использовать переменную экземпляра из суперкласса A
.
Код в живой среде составляет около 100 000 записей ежедневно в базе данных и удаляет те, где CheckGender
и CheckAge
оба являются истинными. Является ли неправильным выбором дизайна для использования переменных экземпляра в этом сценарии? Меня всегда учили использовать локальные переменные. Я ожидал бы, что объект Person
будет передан CheckGender
и CheckAge
на каждый цикл. Или это действительно не имеет значения?
Обратите внимание, что приведенный выше код является гипотетическим примером. CheckGender
и CheckAge
являются сложными функциями в реальном приложении.
Спасибо. +1. Я подумаю об этом. Можете ли вы ответить на исходный вопрос. Неправильно ли использовать переменные экземпляра в цикле или это не имеет большого значения? Пожалуйста, не думайте, что я предлагаю, чтобы вы не ответили на мой вопрос (оставьте свой первоначальный ответ тактично). – w0051977
Вы единственный ответчик на этот вопрос. Я не понимаю ваш последний комментарий. Сожалею. – w0051977
Извините, я подумал об этом: http://stackoverflow.com/questions/15772573/inheritance-variable-initialisation-in-subclass#comment22460230_15772573. Я слишком устал сегодня, я думаю ... –