Wenn ich eine Klasse namens habe MyProgram
, gibt es eine Möglichkeit, " MyProgram " als Zeichenfolge abzurufen ?
Wenn ich eine Klasse namens habe MyProgram
, gibt es eine Möglichkeit, " MyProgram " als Zeichenfolge abzurufen ?
Antworten:
Versuche dies:
this.GetType().Name
nameof
Operator verwenden.
Ich wollte das für ein gutes Maß werfen. Ich denke, die Art und Weise, wie @micahtan gepostet hat, wird bevorzugt.
typeof(MyProgram).Name
nameof(MyProgram)
.
Mit C # 6.0 können Sie den nameof
Operator verwenden:
nameof(MyProgram)
Obwohl die Antwort von micahtan gut ist, funktioniert sie bei einer statischen Methode nicht. 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 als Referenz 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 dies natürlich nicht erforderlich.
Außerdem können Sie dies definieren:
public static class Extension
{
public static string NameOf(this object o)
{
return o.GetType().Name;
}
}
Und dann verwenden Sie wie folgt:
public class MyProgram
{
string thisClassName;
public MyProgram()
{
this.thisClassName = this.NameOf();
}
}
Benutze das
Angenommen , Application Test.exe wird ausgeführt und die Funktion ist foo () in form1 [im Grunde ist es die Klasse form1 ]. Dann wird der obige Code unter der Antwort generiert.
string s1 = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
Dies wird zurückkehren.
s1 = "TEST.form1"
für Funktionsname:
string s1 = System.Reflection.MethodBase.GetCurrentMethod().Name;
wird zurückkehren
s1 = foo
Hinweis, wenn Sie dies in Ausnahmefällen verwenden möchten:
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace );
}
[Nullable(2)]
sodass Sie eine Warnung erhalten, wenn die Nullprüfung aktiv ist.
this
kann ausgelassen werden. Alles, was Sie brauchen, um den aktuellen Klassennamen zu erhalten, ist:
GetType().Name