powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как в vb.net получить имя вызывающей (родительской) функции(процедуры)?
8 сообщений из 8, страница 1 из 1
как в vb.net получить имя вызывающей (родительской) функции(процедуры)?
    #38426778
Турист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
например:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Function fun1() as string
Try
   ... 
Catch ex As Exception
   msgbox("Ошибка в " & "fun1" )     'как получить автоматически строку "fun1" ?
End Try

End Function
...
Рейтинг: 0 / 0
как в vb.net получить имя вызывающей (родительской) функции(процедуры)?
    #38426929
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
как в vb.net получить имя вызывающей (родительской) функции(процедуры)?
    #38426968
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Турист, судя по коду ты имееешь в виду текущую функцию, а не вызывающую. Есть несколько способов:

Через атрибут CallerMemberName, который появился в .NET 4.5


С помощью метода MethodBase.GetCurrentMethod
Код: vbnet
1.
2.
3.
Imports System.Reflection
...
Dim currentMethodName As String = MethodBase.GetCurrentMethod().Name




С помощью класса StackTrace
Код: vbnet
1.
2.
3.
Dim st As New StackTrace
Dim sf As StackFrame = st.GetFrame(0)
Dim currentMethodName As String = sf.GetMethod()
...
Рейтинг: 0 / 0
как в vb.net получить имя вызывающей (родительской) функции(процедуры)?
    #38426969
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Туристнапример:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Function fun1() as string
Try
   ... 
Catch ex As Exception
   msgbox("Ошибка в " & "fun1" )     'как получить автоматически строку "fun1" ?
End Try

End Function



вообще-то в callstack и так эта информация присутствует
...
Рейтинг: 0 / 0
как в vb.net получить имя вызывающей (родительской) функции(процедуры)?
    #38427016
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Главное - на основании информации об имени вызывающего никаких логических выводов не делать, только для отладки
...
Рейтинг: 0 / 0
как в vb.net получить имя вызывающей (родительской) функции(процедуры)?
    #38530935
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилГлавное - на основании информации об имени вызывающего никаких логических выводов не делать, только для отладки
Это вы про что? Вообще-то, это много где используется - "на основании имени вызывающего". Например, для реализации INotifyPropertyChanged.



Турист,

можно ещё через выражения. Пример расширяющего метода (я, правда, не знаю, есть ли в VB это дело, и с VB не умею - поэтому на C# напишу - думаю, в VB как-то аналогично):

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public static string GetMemberName<TResult>(Expression<Func<T, TResult>> expression, ExpressionType expressionType)
{
    switch (expressionType)
    {
        case ExpressionType.Call:
            var methodCallExpression = expression.Body as MethodCallExpression;
            if (methodCallExpression == null)
            {
                throw new InvalidOperationException("Expression must be of method access.");
            }
            return methodCallExpression.Method.Name;

        // Another expression types...

        default:
            throw new InvalidOperationException("No appropriate expression was passed.");
    }
}



Использование, например, внутри объекта:

Код: c#
1.
this.GetMemberName(obj => obj.MyMethod, ExpressionType.Call);





Но вот тут правильно bazile написал - прямо, можно сказать, по убыванию подходящести использования в большинстве случаев. И писать своих расширений, как у меня выше, не надо.
...
Рейтинг: 0 / 0
как в vb.net получить имя вызывающей (родительской) функции(процедуры)?
    #38531341
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нафиг тут не нужны выкрутасы с expression trees - ТС, по-моему, просто не знает про свойство Exception.StackTrace .
...
Рейтинг: 0 / 0
как в vb.net получить имя вызывающей (родительской) функции(процедуры)?
    #38531350
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныНафиг тут не нужны выкрутасы с expression trees - ТС, по-моему, просто не знает про свойство Exception.StackTrace .
Согласен. Я щас на CallerMemberName запал.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как в vb.net получить имя вызывающей (родительской) функции(процедуры)?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]