Проверьте, из какого класса был создан объект

#c# #.net #vb.net #class

#c# #.net #vb.net #класс

Вопрос:

Я искал общий вопрос, но не смог найти никакого решения даже после поиска в Google. Может быть, я неправильно ищу?

Можно ли узнать, из какого класса был создан объект? Например: в коде Visual Basic:

У меня есть класс,

 Public Class dummyA

End Class
 

У меня есть другой класс,

 Public Class dummyMain
    Dim dmmA As New dummyA
End Class
 

Могу ли я проверить dummyA , был ли объект создан из dummyMain?

Ответьте с помощью c # или VB.Net было бы здорово. Спасибо.

Ответ №1:

Самый простой способ — иметь перегруженный конструктор и передать в него владельца.

 public class DummyA
{
    public DummyA(object owner)
    {
       var createdByDummyMain = owner is DummyMain;
    }
}
 

а затем выполните

 public class DummyMain
{
    public DummyMain()
    {
        var dmmA = new DummyA(this);
    }
}
 

Существует также это, но это не даст вам именно то, что вы хотите. Есть и другие предложения, которые касаются, StackFrame но это ненадежно из-за оптимизации JIT.

Комментарии:

1. И обратите внимание, что это редко будет хорошей идеей для типа owner to be Object , особенно за пределами сценариев отладки. В большинстве случаев тип должен быть чем-то более конкретным, что обеспечит любое средство, которое вы хотите, чтобы класс использовал (скорее всего, какое-то Interface ).