Иллюстрированный самоучитель по VB.NET




Проблема неустойчивости базовых классов и контроль версии - часть 3


Программа работает именно так, как предполагалось.

Рис. 5.7. Демонстрация неустойчивости базовых классов (контроль версии отсутствует)

Программа компилируется в исполняемый файл Versiomngl.exe, все идет прекрасно.

Теперь предположим, что класс PayableEntity был разработан независимой фирмой. Гениальные разработчики класса PayableEntity не желают почивать на лаврах! Заботясь о благе пользователей, они включают в свой класс объект с адресом и рассылают новый вариант DLL. Исходный текст они держат в секрете, но мы его приводим ниже. Изменения в конструкторе выделены жирным шрифтом:

Imports Microsoft.Vi sualBasic.Control Chars

Public Class PayableEntity

Private m_Name As String

Private m_Address As Address

Public Sub New(ByVal theName As String,ByVal theAddress As Address)

m_Name = theName

m_Address = theAddress

End Sub

Public Readonly Property TheName()As String Get

Return m_Name End Get

End Property

Public Readonly Property TheAddress() Get

Return

m_Address.DisplayAddress

End Get

End Property

End Class

Public Class Address

Private m_Address As String

Private m_City As String

Private m_State As String

Private m_Zip As String

Public Sub New(ByVal theAddress As String.ByVal theCity As String.

ByVal theState As String.ByVal theZip As String)

m_Address = theAddress

m_City = theCity

m_State = theState

m_Zip = theZip

End Sub

Public Function DisplayAddress() As String

Return m_Address & CrLf & m_City & "." & m_State _

&crLF & m_Zip

End Function

End Class

Перед вами пример редкостной халтуры. В процессе «усовершенствования» авторы умудрились потерять исходный конструктор класса PayableEntity! Конечно, такого быть не должно, но раньше подобные катастрофы все же случались. Старая DLL устанавливалась на жесткий диск пользователя (обычно в каталог Windows\System). Затем выходила новая версия, устанавливалась поверх старой, и вполне благополучная программа Versioningl переставала работать (а как ей работать, если изменился конструктор базового класса?).



Содержание  Назад  Вперед