Как получить (возможно ли) ссылку на класс, который создает экземпляр другого класса? - PullRequest
1 голос
/ 20 мая 2010

Странная ситуация ... Мне нужно создать новый экземпляр класса, которому нужен член вызывающего класса. Но я не могу передать ссылку на вызывающий класс через конструктор.

Решение, которое я ищу, выглядит примерно так:

Public Class ChildClass
    Public Sub New(args)
        _MyMember = GetMemberFromCallingClass()
        ...
        ...
    End Sub
End Class

Я хочу, чтобы это работало без необходимости вручную передавать какие-либо ссылки или переменные из вызывающего класса в новый экземпляр ChildClass.

Возможно ли это, и если да, на что мне обратить внимание, чтобы сделать эту часть моего кода.

Ответы [ 2 ]

0 голосов
/ 20 мая 2010

Если под членом вы подразумеваете, что хотите вызвать свойство или метод для фактического экземпляра вызывающего класса, то нет вы не сможете этого сделать. Лучшее, что вы можете сделать, - это пройти по стеку через StackTrace, чтобы извлечь информацию о типе вызывающего класса, но вы не сможете извлечь фактический экземпляр. Если вы хотите, чтобы код в другом классе имел доступ к членам конкретного экземпляра другого класса, вам придется передать эту ссылку.

0 голосов
/ 20 мая 2010

Вы делаете что-то вроде кода ниже, чтобы получить тип вызывающего класса:

Dim trace As New System.Diagnostics.StackTrace()
System.Diagnostics.Debug.WriteLine(trace.GetFrame(1).GetMethod().ReflectedType.Name)

Затем вы можете вызвать GetMethods или 'GetMember' или подобное для отраженного типа, чтобы получить нужный метод.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...