Слетают значения Paramlist внутри Property Set ( Paramlist )

13.03.2009
625
2
#1
при использовании New справа от присваивания:
Код:
	Set treasureIsland.person( \"Сквайр Трелони\" ) =	New TPersonInfo( \"Туп, жаден, прожорлив, ленив, труслив, надменен. Богат. Характер отсутствует. Не женат.\")
Код нормално компилируется, новый объект создается и передается в тело Property. Упс приходит неожиданно: слетают значения параметров проперти. При этом иногда ложится клиент. В данном примере теряется \"Сквайр Трелони\". Если объект предварительно создать - присвоение отрабатывает корректно.
Проверено в 7.01, 7.03, 8.5
Код:
Private Class TPersonInfo
Private t_info As String
Sub New( i_info As String )
t_info = i_info
End Sub
End Class
Private Class TBook
Private t_person List As TPersonInfo
Sub New()
End Sub
Public Property Set person( i_name As String ) As TPersonInfo
Set t_person( i_name ) = person
End Property
End Class

Sub Initialize
Dim treasureIsland As New TBook
Dim billy As New TPersonInfo( \"Обладатель карты Острова Сокровищ. Много пьёт и всегда простужен. Характер скверный. Не женат.\" )
Set treasureIsland.person( \"Билли Бонс\" ) = billy

\' следующая строка работает некорректно:
Set treasureIsland.person( \"Доктор Ливси\" ) = New TPersonInfo( \"Очень хороший и весёлый человек. Характер общительный. Не женат.\")
End Sub
Вот такие вот грабли...
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#2
R 6.5.4 тоже баг... забавно... это баг работы с памятью, когда объект передается через "временную переменную"-параметр функции (забыл как это называется правильно)...

придется юзать так:
Код:
Sub Initialize
Dim treasureIsland As New TBook
Dim billy As New TPersonInfo( "Обладатель карты Острова Сокровищ. Много пьёт и всегда простужен. Характер скверный. Не женат." )
Set treasureIsland.person( "Билли Бонс" ) = billy
' следующая строка работает некорректно:
Set billy = New TPersonInfo( "Очень хороший и весёлый человек. Характер общительный. Не женат." )
Set treasureIsland.person( "Доктор Ливси" ) = billy
End Sub