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

Если у меня есть класс под названием MyProgramЕсть ли способ получить "MyProgram" в виде строки?

12 ответов

Решение

Попробуй это:

this.GetType().Name

Я хотел бросить это для хорошей меры. Я думаю, что способ @micahtan опубликовал предпочтительнее.

typeof(MyProgram).Name

С C# 6.0 вы можете использовать nameof оператор:

nameof(MyProgram)

Хотя ответ Микахтана хорош, он не будет работать в статическом методе. Если вы хотите получить имя текущего типа, этот должен работать везде:

string className = MethodBase.GetCurrentMethod().DeclaringType.Name;

Если вам это нужно в производных классах, вы можете поместить этот код в базовый класс:

protected string GetThisClassName() { return this.GetType().Name; }

Затем вы можете получить имя в производном классе. Возвращает имя производного класса. Конечно, при использовании нового ключевого слова "nameof" не будет никакой необходимости, как этот сорт действует.

Кроме того, вы можете определить это:

public static class Extension
{
    public static string NameOf(this object o)
    {
        return o.GetType().Name;
    }
}

А затем используйте как это:

public class MyProgram
{
    string thisClassName;

    public MyProgram()
    {
        this.thisClassName = this.NameOf();
    }
}

Для справки, если у вас есть тип, который наследуется от другого, вы также можете использовать

this.GetType().BaseType.Name

this может быть опущен Все, что вам нужно, чтобы получить имя текущего класса:

GetType().Name

Использовать этот

Предположим, что Application Test.exe запущен и функция foo() в form1 [в основном это класс form1], тогда приведенный выше код сгенерирует ответ ниже.

string s1 = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;

Это вернется.

s1 = "TEST.form1"

для имени функции:

string s1 = System.Reflection.MethodBase.GetCurrentMethod().Name;

вернусь

s1 = foo 

Обратите внимание, если вы хотите использовать это в исключительной ситуации:

catch (Exception ex)
{

    MessageBox.Show(ex.StackTrace );

}

Это можно использовать для универсального класса

typeof(T). Имя

Получить Текущее имя класса Asp.net

string CurrentClass = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name.ToString();

Самый простой способ - использовать атрибут имени звонка. Однако в настоящее время нет класса атрибута, который возвращает имя класса или пространство имен вызывающего метода.

См .: CallerMemberNameAttributeClass

      public void DoProcessing()
{
    TraceMessage("Something happened.");
}

public void TraceMessage(string message,
        [System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
        [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
        [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)
{
    System.Diagnostics.Trace.WriteLine("message: " + message);
    System.Diagnostics.Trace.WriteLine("member name: " + memberName);
    System.Diagnostics.Trace.WriteLine("source file path: " + sourceFilePath);
    System.Diagnostics.Trace.WriteLine("source line number: " + sourceLineNumber);
}

// Sample Output:
//  message: Something happened.
//  member name: DoProcessing
//  source file path: c:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoCS\CallerInfoCS\Form1.cs
//  source line number: 31

MyProgram это тип, так что вы можете сделать

typeof(MyProgram).Name
Другие вопросы по тегам