Есть ли функция, которая возвращает текущее имя класса/метода? [дубликат]


этот вопрос уже есть ответ здесь:

  • C# получает собственное имя класса 9 ответов

В C# есть функция, которая возвращает текущее имя класса/метода?

6 81
c#

6 ответов:

текущее имя класса:

this.GetType().Name;

текущее имя метода:

using System.Reflection;

// ...

MethodBase.GetCurrentMethod().Name;

Так как вы используете это для целей регистрации, вы также можете быть заинтересованы в получении текущая трассировка стека.

System.Reflection.MethodBase.GetCurrentMethod().DeclaringType

Я немного изменил приведенный выше пример в этот фрагмент кода рабочего примера:

public class MethodLogger : IDisposable
{
    public MethodLogger(MethodBase methodBase)
    {
        m_methodName = methodBase.DeclaringType.Name + "." + methodBase.Name;
        Console.WriteLine("{0} enter", m_methodName);
    }

    public void Dispose()
    {
        Console.WriteLine("{0} leave", m_methodName);
    }
    private string m_methodName;
}

class Program
{
    void FooBar()
    {
        using (new MethodLogger(MethodBase.GetCurrentMethod()))
        {
            // Write your stuff here
        }
    }
}

выход:

Program.FooBar enter
Program.FooBar leave

да! Статический GetCurrentMethod класса MethodBase будет проверять вызывающий код, чтобы узнать, является ли он конструктором или обычным методом, и возвращает либо MethodInfo, либо ConstructorInfo.

это пространство имен является частью API отражения, поэтому вы можете в основном обнаружить все, что может видеть время выполнения, используя его.

здесь вы найдете исчерпывающее описание API:

http://msdn.microsoft.com/en-us/library/system.reflection.aspx

Если вы не хотите просматривать всю эту библиотеку вот пример, который я приготовил:

namespace Canvas
{
  class Program
  {
    static void Main(string[] args)
    {
        Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod());
        DiscreteMathOperations viola = new DiscreteMathOperations();
        int resultOfSummation = 0;
        resultOfSummation = viola.ConsecutiveIntegerSummation(1, 100);
        Console.WriteLine(resultOfSummation);
    }
}

public class DiscreteMathOperations
{
    public int ConsecutiveIntegerSummation(int startingNumber, int endingNumber)
    {
        Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod());
        int result = 0;
        result = (startingNumber * (endingNumber + 1)) / 2;
        return result;
    }
}    
}

вывод этого кода будет:

Void Main<System.String[]> // Call to GetCurrentMethod() from Main.
Int32 ConsecutiveIntegerSummation<Int32, Int32> //Call from summation method.
50 // Result of summation.

надеюсь, что я помог вам!

JAL

вы можете получить текущее имя класса, но я не могу думать о том, чтобы получить текущее имя метода. Хотя, названия методов для текущего можно получить.

string className = this.GetType().FullName;
System.Reflection.MethodInfo[] methods = this.GetType().GetMethods();
foreach (var method in methods)
    Console.WriteLine(method.Name);