• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

  • Автор темы fedotxxl
  • Дата начала
F

fedotxxl

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

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

Yakov

Происходит ли инициализация в конструкторе (процедуре 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
 
F

fedotxxl

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

Yakov

Для: 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
 
K

Kee_Keekkenen

технически new - это должен быть конструктор класса, т.е. в нем должны инициализироваться необходимые объекты класса.. если таковых нет, то конструктор необязателен..
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!