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

Код: 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
14.10.2013, 16:49
    #38426929
Нахлобуч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в vb.net получить имя вызывающей (родительской) функции(процедуры)?
...
Рейтинг: 0 / 0
14.10.2013, 17:13
    #38426968
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в vb.net получить имя вызывающей (родительской) функции(процедуры)?
Турист, судя по коду ты имееешь в виду текущую функцию, а не вызывающую. Есть несколько способов:

Через атрибут 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
14.10.2013, 17:14
    #38426969
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в vb.net получить имя вызывающей (родительской) функции(процедуры)?
Туристнапример:

Код: 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
14.10.2013, 17:39
    #38427016
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в vb.net получить имя вызывающей (родительской) функции(процедуры)?
Главное - на основании информации об имени вызывающего никаких логических выводов не делать, только для отладки
...
Рейтинг: 0 / 0
19.01.2014, 12:38
    #38530935
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в vb.net получить имя вызывающей (родительской) функции(процедуры)?
ИзопропилГлавное - на основании информации об имени вызывающего никаких логических выводов не делать, только для отладки
Это вы про что? Вообще-то, это много где используется - "на основании имени вызывающего". Например, для реализации 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
20.01.2014, 06:06
    #38531341
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в vb.net получить имя вызывающей (родительской) функции(процедуры)?
Нафиг тут не нужны выкрутасы с expression trees - ТС, по-моему, просто не знает про свойство Exception.StackTrace .
...
Рейтинг: 0 / 0
20.01.2014, 06:33
    #38531350
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в vb.net получить имя вызывающей (родительской) функции(процедуры)?
Сон Веры ПавловныНафиг тут не нужны выкрутасы с expression trees - ТС, по-моему, просто не знает про свойство Exception.StackTrace .
Согласен. Я щас на CallerMemberName запал.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как в vb.net получить имя вызывающей (родительской) функции(процедуры)? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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