Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
554 / 508 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
1

Можно ли во время выполнения "извлечь" имя приложения, имя класса, имя исполняемого метода и пр. ?

29.07.2009, 11:47. Показов 3111. Ответов 3
Метки нет (Все метки)

или какие-нубдь "квазипеременные" компилятора, позволяющие их использовать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.07.2009, 11:47
Ответы с готовыми решениями:

Как в билдере получить с сервера (MySQL 5.1, имя базы "skola", имя table "info") имя столбцов и имя строк
Доброва времены суток Как в билдере получить с сервера (MySQL 5.1, имя базы "skola", имя table...

Ошибка ("Get-ADUser : Имя объекта имеет недопустимый синтаксис"), если имя подразделения содержит кавычки
ввожу:get-aduser -SearchBase "OU=hackers,DN=contoso,DN=com" -filter *все отрабатывается нормально ...

Запросить у пользователя имя, фамилию, а затем вывести строку вида "фамилия, имя"
С. Прата, "Язык программирования С++", 4 глава, задача 3. Напишите программу, которая запрашивает...

VBA на ресурсе ввести имя "имя" и пароль "пароль" и нажать кнопку Войти
здравствуйте мне нужно на VBA на локальный ресурс http://10.196.192.97/Statistics зайти, ввести...

__________________

Записывайтесь на профессиональные курсы С#-разработчиков‌
3
MCSD: APP BUILDER
8790 / 1068 / 104
Регистрация: 17.06.2006
Сообщений: 12,604
29.07.2009, 12:14 2
естессно, можно.
изучай свойства класса Type
получить чего можно так
<объект>.GetType()
или
typeof(<тип>)
0
554 / 508 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
29.07.2009, 22:10  [ТС] 3
Цитата Сообщение от Rififi Посмотреть сообщение
естессно, можно.
изучай свойства класса Type
получить чего можно так
<объект>.GetType()
или
typeof(<тип>)
а исходный файл? а строчку кода? в vc++ я имел такие вещи как __FILE__, __LINE__.
StackTrace для меня также исключен (целевая платформа - smart device)

цель - хочу как-нибудь исключить ошибки cope-paste при записи в лог. можно, конечно, быть повнимательнее, но опыт показывает, что 0. - времени на копипэйст меньше чем на копипэйст+корректура; 1. - когда-то все равно забываешь (или кто-нибудь забывает) скорректировать, и потом разбираешься с фальшивым логом, что лучше чем без лога вообще.
0
84 / 83 / 6
Регистрация: 13.07.2009
Сообщений: 107
29.07.2009, 23:17 4
Я пока слабо знаком с новыми возможностями эмитирования (System.Reflection.Emit Namespace), которые появились в C# 3.0, но до этого все подобные задачи можно было решать с помощью механизма отражений реализованного в System.Reflection Namespace.

Как сказал уважаемый Шилдт в одном из своих нетонких трактатов:
Программный интерфейс Reflection API —довольно обширная тема, и здесь невозможно рассмотреть ее в полном объеме. (Полное описание Reflection API — это материал для целой книги!) Но интерфейс Reflection API столь логичен, что, поняв, как использовать одну его часть, нетрудно разобраться во всем остальном.
Как пример приведу два своих класса, которые я использую в своем игровом движке для хранения функций произвольного класса соответствующих определенным критериям и последующего их вызова по имени функции переданному в качестве строки.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
using System;
using System.Collections.Generic;
using System.Reflection;
 
namespace max_cn.studying.classes
{
  /// <summary>
  /// Class for instances stored in ReflectedFunctionsCore class
  /// </summary>
  public class ReflectedFunction
  {
    private MethodInfo method;
    public string id
    {
      get { return method.Name; }
    }
 
    public ReflectedFunction(MethodInfo method)
    {
      this.method=method;
    }
 
    /// <summary>
    /// instance invoke method
    /// </summary>
    public void Invoke(object param)
    {
      object[] parameters=new object[1];
      parameters[0]=param;
      method.Invoke(null,parameters);
    }
 
    /// <summary>
    /// static invoke method (useful when some instances can be null)
    /// </summary>
    public static void Invoke(ReflectedFunction f,object param)
    {
      if (f!=null) f.Invoke(param);
    }
  }
 
  /// <summary>
  /// Class-container for list of function from class T with 1 parameter
  /// of PT type
  /// </summary>
  /// <typeparam name="T">target class type</typeparam>
  /// <typeparam name="PT">method parameter type</typeparam>
  public class ReflectedFunctionsCore<T,PT>
  {
    private Type eventsClassType;
    private Type paramType;
    private List<ReflectedFunction> list;
 
    public ReflectedFunctionsCore()
      : this(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Static)
    {
    }
    
    public ReflectedFunctionsCore(BindingFlags attr)
    {
      list=new List<ReflectedFunction>();
 
      eventsClassType=typeof(T);
      paramType=typeof(PT);
 
      MethodInfo[] methodsList=eventsClassType.GetMethods(attr);
      for (int i=0;i<methodsList.Length;i++)
      {
        ParameterInfo[] parameters=methodsList[i].GetParameters();
        //supported only functions with 1 parameter
        if (parameters.Length==1)
        {
          if (parameters[0].ParameterType==paramType)
            list.Add(new ReflectedFunction(methodsList[i]));
        }
      }
    }
 
    /// <summary>
    /// get method with name id
    /// </summary>
    public ReflectedFunction Get(string id)
    {
      if (id!=null)
        for (int i=0;i<list.Count;i++)
          if (list[i].id==id) return list[i];
      return null;
    }
 
    /// <summary>
    /// invoke method with name id and parameter param
    /// </summary>
    public void Invoke(string id,object param)
    {
      ReflectedFunction f=Get(id);
      if (f!=null) f.Invoke(param);
    }
 
    /// <summary>
    /// release resourses
    /// </summary>
    public void Dispose()
    {
      if (list!=null)
      {
        list.Clear();
        list=null;
      }
    }
  }
}
Если есть желание ковыряться в каком-то экзешном или lib-файле, то рекомендую почитать о классе Assembly. Вот пример из MSDN:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
using System;
using System.Reflection;
using System.Security.Permissions;
 
[assembly:AssemblyVersionAttribute("1.0.2000.0")]
 
public class Example
{
    private int factor;
    public Example(int f)
    {
        factor = f;
    }
 
    public int SampleMethod(int x) 
    { 
        Console.WriteLine("\nExample.SampleMethod({0}) executes.", x);
        return x * factor;
    }
 
    public static void Main()
    {
        Assembly assem = Assembly.GetExecutingAssembly();
 
        Console.WriteLine("Assembly Full Name:");
        Console.WriteLine(assem.FullName);
 
        // The AssemblyName type can be used to parse the full name.
        AssemblyName assemName = assem.GetName();
        Console.WriteLine("\nName: {0}", assemName.Name);
        Console.WriteLine("Version: {0}.{1}", 
            assemName.Version.Major, assemName.Version.Minor);
 
        Console.WriteLine("\nAssembly CodeBase:");
        Console.WriteLine(assem.CodeBase);
 
        // Create an object from the assembly, passing in the correct number
        // and type of arguments for the constructor.
        Object o = assem.CreateInstance("Example", false, 
            BindingFlags.ExactBinding, 
            null, new Object[] { 2 }, null, null);
 
        // Make a late-bound call to an instance method of the object.    
        MethodInfo m = assem.GetType("Example").GetMethod("SampleMethod");
        Object ret = m.Invoke(o, new Object[] { 42 });
        Console.WriteLine("SampleMethod returned {0}.", ret);
 
        Console.WriteLine("\nAssembly entry point:");
        Console.WriteLine(assem.EntryPoint);
    }
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.07.2009, 23:17

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Сообщение об ошибке "Имя... не распознано как имя командлета, функции, файла сценария..." при вызове функции
Добрый день уважемые коллеги. Написал простой скрипт который мониторит создались ли файлы с...

С клавиатуры вводится строка "Фамилия Имя Отчество". Изменить вывод строки на "Имя Отчество Фамилия"
С клавиатуры вводится строка &quot;Фамилия Имя Отчество&quot;. Изменить вывод строки на &quot;Имя Отчество...

Не могу создать поток ("Требуется имя метода")
Пытаюсь создать поток, но постоянно выскакивает ошибка &quot;Требуется имя метода&quot;. Чего я только не...

Составить программу, которая вводит с клавиатуры имя и год рождения лица и выводит на экран "Привет Имя, тебе Р лет:).
Буду благодарен. =(( 1. Составить программу, которая вводит с клавиатуры имя и год рождения лица и...

Возможно ли как-то, зная имя класса, вернуть в каком-либо методе имя класса?
Добрый день! Интересуюсь. Есть Обобщенный метод, например: Add&lt;T&gt;(string nameElement). ...

Строку в формате "фамилия, имя, отчество" преобразовать в формат "имя, отчество, фамилия"
последовательность содержит Ваша фамилия, имя, отчество. Превратить ее таким образом, чтобы сначала...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.