2013-02-13 2 views
0

Так что в моем классе 'myInfo' у меня есть свойство aliased 'HeaderInfo', которое является свойством класса, где оно фактически является заголовком гораздо более глубокого класса.Вызов набора родительского свойства при настройке дочерних свойств

Private _header As myHeader 
Public Property HeaderInfo() AS myHeader 
    Get 
     Return _header 
    End Get 
    Set(ByVal value As myHeader) 
     _header = value 
     Someotherclass.Foo.Bar.AnotherThing.Header = _header 
    End Set 
End Property 

MYHEADER класс со свойствами, как «Имя», «ID» и т.д., которые являются строками. Поэтому, когда я ссылаться на это свойство в чем-то, как в Windows Forms, я

Dim info As New myInfo() 
info.HeaderInfo.ID = "ID HERE" 
info.HeaderInfo.Name = "Name here" 

Он работает в той степени, что экземпляр info.HeaderInfo будет заходящего все его свойства правильно, но

Someotherclass.Foo.Bar.AnotherThing.Header = _header 

никогда не устанавливается внутри myInfo.HeaderInfo 'Set', потому что я не устанавливаю свойство напрямую, я устанавливаю его подзадачи в предположении, что он будет распространяться. Разве я не понимаю, как работают свойства с настраиваемым типом? Есть ли способ распространять это?

+0

Вы можете назначить 'myHeader' из' info' 'Someotherclass.Foo.Bar.AnotherThing.Header' после того, как вы установите свойства в' info', например. 'Someotherclass.Foo.Bar.AnotherThing.Header = info.HeaderInfo' –

+0

@JohnWillemse Да, я думаю, что я это сделаю. Я пытаюсь сделать это в конструкторе myInfo, поэтому он будет действовать как ссылка, но, похоже, это не работает. –

+1

Нет, конструктор вызывается перед установкой свойств, и вы остаетесь с той же проблемой. Просто «скопируйте» информацию заголовка после установки свойств. –

ответ

1

Чтобы это произошло автоматически, вам нужно будет изменить установщик для свойств в вашем типе myHeader, и для этого, чтобы ваши экземпляры типа должны были знать о конкретном экземпляре вашего типа myInfo.

Давайте посмотрим, почему это не работает так, как вы надеялись. Чтобы сделать это, я развалится это утверждение:

info.HeaderInfo.ID = "ID HERE" 

При том, что оператор выполняется, первая переменная info должна быть де-ссылки, чтобы получить экземпляр объекта он относится. Когда у нас есть этот объект, у нас должно быть получить (не установить) свойство HeaderInfo, чтобы мы имели ссылку на экземпляр объекта myHeader. Когда у нас есть объект myHeader, мы вызываем setter в свойстве ID для завершения назначения.

Надеюсь, это прояснит, почему это работает так, как оно. Вы получаете доступ к свойству HeaderInfo, но только используете его.

Side Примечание: если вы когда-нибудь увидеть «ссылка на объект не указывает на экземпляр объекта» это то, что он говорит о: переменной или свойства, которые вы не ожидали в выражении было ничего/нуль.

+0

Прохладный. Я думаю, что понимаю, но так, как мой проект настроен, было бы невозможно сделать это таким образом. Я думаю, что я просто сделаю так, чтобы они создали новый экземпляр заголовка, заполнили информацию, а затем установили этот экземпляр в Public Property. –

Смежные вопросы