Изменение ссылки на класс внутри самого класса

fedotxxl

Well-known member
09.11.2005
614
0
#1
У меня есть класс. При инциализации он должен зайти в "хранилище объектов", поискать подобный объект по IDшнику и, если такой объект, заменить себя на него. Т.е. что-то типа
Set Me = Obj, где Me и Obj одинаковый класс, просто с разными атрибутами...

Вот такой вот бред
 
Y

Yakov

#2
Происходит ли инициализация в конструкторе (процедуре New())? Если да, то, по-моему, лучше сделать функцию создания экземпляров данного класса, запретив непосредственное создание оператором New. Пример.
Код:
Public Class Foo
Private id As String
'...
Private Sub New(id As String)
Me.id = id
'...
End Sub
Public Function getID() As String
getID = id
End Function
'...
End Class

Private fooObjects List As Foo

Public Function getFooInstance(id As String) As Foo
If Not Iselement(fooObjects(id)) Then
Dim fooObj As New Foo(id)
Set fooObjects(id) = fooObj
End If
Set getFooInstance = fooObjects(id)
End Function
 

fedotxxl

Well-known member
09.11.2005
614
0
#3
Для: Yakov
Спасибо, сделал примерно таким образом
Возник вопрос по ООП - почему, если в мастер классе объявлен метод New, то его нужно переопределять в наследующих классах?
 
Y

Yakov

#4
Для: fedotxxl
Наверное, для того, чтобы можно было изменить набор параметров метода New. Чтобы вызвать метод суперкласса, используйте оператор '..':
Код:
Class ParentClass
Sub New(id As String)
End Sub
End Class
Class ChildClass As ParentClass
Sub New(id As String)
Call ParentClass..New(id)
End Sub
End Class
 

Kee_Keekkenen

Well-known member
05.09.2006
639
4
#5
технически new - это должен быть конструктор класса, т.е. в нем должны инициализироваться необходимые объекты класса.. если таковых нет, то конструктор необязателен..