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

Тема в разделе "Lotus - Программирование", создана пользователем fedotxxl, 9 фев 2008.

  1. fedotxxl

    fedotxxl Well-Known Member

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

    Вот такой вот бред
     
  2. Yakov

    Yakov Гость

    Происходит ли инициализация в конструкторе (процедуре New())? Если да, то, по-моему, лучше сделать функцию создания экземпляров данного класса, запретив непосредственное создание оператором New. Пример.
    Код (Text):
    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
     
  3. fedotxxl

    fedotxxl Well-Known Member

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

    Yakov Гость

    Для: fedotxxl
    Наверное, для того, чтобы можно было изменить набор параметров метода New. Чтобы вызвать метод суперкласса, используйте оператор '..':
    Код (Text):
    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
     
  5. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    технически new - это должен быть конструктор класса, т.е. в нем должны инициализироваться необходимые объекты класса.. если таковых нет, то конструктор необязателен..
     
Загрузка...

Поделиться этой страницей