Wenn ich eine Klasse namens MyProgram
habe, gibt es eine Möglichkeit, " MyProgram " als String abzurufen?
Versuche dies:
this.GetType().Name
Ich wollte das für ein gutes Maß erheben. Ich denke, die Art und Weise, wie @micahtan gepostet hat, wird bevorzugt.
typeof(MyProgram).Name
Mit C # 6.0 können Sie den Operator nameof
verwenden:
nameof(MyProgram)
Die Antwort von Micahtan ist zwar gut, funktioniert aber nicht statisch. Wenn Sie den Namen des aktuellen Typs abrufen möchten, sollte dieser überall funktionieren:
string className = MethodBase.GetCurrentMethod().DeclaringType.Name;
Wenn Sie einen Typ haben, der von einem anderen erbt, können Sie ihn auch verwenden
this.GetType().BaseType.Name
Wenn Sie dies in abgeleiteten Klassen benötigen, können Sie diesen Code in die Basisklasse einfügen:
protected string GetThisClassName() { return this.GetType().Name; }
Dann können Sie den Namen in der abgeleiteten Klasse erreichen. Gibt den abgeleiteten Klassennamen zurück. Wenn Sie das neue Schlüsselwort "nameof" verwenden, ist es natürlich nicht nötig, dass diese Sorte wirkt.
Außerdem können Sie dies definieren:
public static class Extension
{
public static string NameOf(this object o)
{
return o.GetType().Name;
}
}
Und dann wie folgt verwenden:
public class MyProgram
{
string thisClassName;
public MyProgram()
{
this.thisClassName = this.NameOf();
}
}
Benutze das
Angenommen, Application Test.exe läuft und die Funktion ist foo () in form1 [Im Grunde ist es class form1], dann wird der obige Code unter der Antwort erzeugen.
string s1 = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
Das wird wiederkommen.
s1 = "TEST.form1"
für Funktionsname:
string s1 = System.Reflection.MethodBase.GetCurrentMethod().Name;
wird zurückkehren
s1 = foo
Beachten Sie, wenn Sie dies bei Ausnahmebedingungen verwenden möchten:
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace );
}
Liefert den aktuellen Klassennamen von Asp.net
string CurrentClass = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name.ToString();
this
kann weggelassen werden. Alles was Sie benötigen, um den aktuellen Klassennamen zu erhalten, ist:
GetType().Name
MyProgram ist ein Typ, den Sie ausführen können
typeof(MyProgram).Name