it-swarm.com.de

C # erhält seinen eigenen Klassennamen

Wenn ich eine Klasse namens MyProgram habe, gibt es eine Möglichkeit, " MyProgram " als String abzurufen?

349
deltanovember

Versuche dies:

this.GetType().Name
584
micahtan

Ich wollte das für ein gutes Maß erheben. Ich denke, die Art und Weise, wie @micahtan gepostet hat, wird bevorzugt.

typeof(MyProgram).Name
185
ChaosPandion

Mit C # 6.0 können Sie den Operator nameof verwenden:

nameof(MyProgram)
137
Cyanfish

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;
117
Thomas Levesque

Wenn Sie einen Typ haben, der von einem anderen erbt, können Sie ihn auch verwenden

this.GetType().BaseType.Name
14
mikeschuld

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();
    }
}
10
bafsar

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

}
8

Liefert den aktuellen Klassennamen von Asp.net 

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

this kann weggelassen werden. Alles was Sie benötigen, um den aktuellen Klassennamen zu erhalten, ist: 

GetType().Name
0
Mikael Engver

MyProgram ist ein Typ, den Sie ausführen können 

typeof(MyProgram).Name
0
nPcomp