Кто вызвал общий метод? - PullRequest
       0

Кто вызвал общий метод?

1 голос
/ 20 августа 2010

У меня есть родительский класс (Foo) с общим методом sharedMethod().Это MustInherit.Bar и Baz классы наследуются от Foo.Я сделаю что-то подобное:

Dim baz as New Baz()
Dim bar as New Bar()

baz.sharedMethod()
bar.sharedMethod()

В пределах Foo sharedMethod() мне нужно знать, кто это назвал.Мне нужно имя класса.Итак, используя приведенный выше пример, это будет соответственно Baz или Bar.

Ответы [ 5 ]

4 голосов
/ 20 августа 2010

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

 Foo.sharedMethod()
0 голосов
/ 20 августа 2010

Возможно, вам следует подумать о переопределении метода в дочерних классах вместо использования общих методов. В переопределении обязательно вызовите метод базового класса. Если внутри родительского метода есть функциональность, которая должна знать, как он вызывается (и не может быть перемещена в дочерние классы), то вам следует рассмотреть возможность использования обобщений. Затем внутри дочернего класса вы передадите дочерний тип в конструктор foo.

0 голосов
/ 20 августа 2010

Вы можете задать параметр для общего метода и указать этот путь.

0 голосов
/ 20 августа 2010

Зачем вам это знать? Это не похоже на «правильный путь» идти о вещах. Если вам нужен метод shared, чтобы сделать что-то особенное с его вызывающей стороной, тогда укажите Foo в качестве параметра для метода shared (в этот момент он, вероятно, не стоит того, чтобы его делили больше)!

0 голосов
/ 20 августа 2010

В вашей функции вы можете использовать:

Me.GetType().Name

Предполагается, что ваш метод не объявлен как

Private/Public/Protected Shared MyMethod()

И что, когда вы говорите «sharedmethod», вы только подразумеваете, что оба класса имеют доступ к методу. Если у вас есть реальный метод Shared, вам нужно будет использовать что-то из Reflection and Diagnostics, чтобы получить эту информацию как , описанное здесь .

...