C# получает свое собственное имя класса
Если у меня есть класс под названием MyProgram
Есть ли способ получить "MyProgram" в виде строки?
12 ответов
Я хотел бросить это для хорошей меры. Я думаю, что способ @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