C # получает свое собственное имя класса - PullRequest
374 голосов
/ 22 января 2010

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

Ответы [ 9 ]

620 голосов
/ 22 января 2010

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

this.GetType().Name
199 голосов
/ 22 января 2010

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

typeof(MyProgram).Name
149 голосов
/ 21 августа 2014

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

nameof(MyProgram)
118 голосов
/ 22 января 2010

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

string className = MethodBase.GetCurrentMethod().DeclaringType.Name;
14 голосов
/ 22 января 2010

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

this.GetType().BaseType.Name
10 голосов
/ 24 апреля 2015

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

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();
    }
}
8 голосов
/ 16 декабря 2014

Используйте это

Допустим, приложение Test.exe работает и функция foo () в form1 [в основном это форма класса1 ] , то код выше будет генерировать ответ ниже.

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 );

}
1 голос
/ 07 октября 2017

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

string CurrentClass = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name.ToString();
0 голосов
/ 08 августа 2017

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

GetType().Name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...