2016-08-08 14 views
0

In Android, wenn ich den Namen der aktuellen Klasse erhalten müssen, ich so etwas wie tun:Get Current Class Name

private final _TAG = DummyActivity.this.getClass().getSimpleName(); 

diese "DummyActivity"

ich tun mag, gleiche in C# zurückkehren WPF-App-Code-Behind. Wie bekomme ich den Namen der aktuellen Klasse?

this.GetType().Name; //this works only on instances of a class 

Sieht aus wie die einzige Option, um hart-Code ist es in C# wie folgt aus:

private const string _TAG = "DummyWindow"; 
+2

sehen: http://stackoverflow.com/questions/2081612/net-determine-the-type-of-this-class-in-its- static-method –

+0

Beachten Sie, dass die Frage des markierten Duplikats spezifischer ist und nach Informationen fragt, die zum Zeitpunkt der Kompilierung nicht verfügbar sind. Dort gibt es jedoch zahlreiche Antworten, von denen einige auch hier zutreffen. Es ist wichtig zu beachten, dass die markierte doppelte Frage besagt, dass sie in einer statischen Basisklassenmethode feststellen können, ob sie über eine abgeleitete Klasse aufgerufen werden, dies ist jedoch einfach nicht wahr. Das Beste, was Sie tun können, ist den Typ der deklarierenden Klasse zu finden, was hier gefragt wird, und es gibt Antworten im Duplikat, die das adressieren. –

Antwort

3

Ein Instanz würde genau "aktuell" sein, das Konzept nicht viel Sinn, sonst macht. Wenn Sie nur den Namen eines bekannten Typs möchten, wäre das typeof(Class).Name. Versuchen

+0

aber Ergebnis von typeof (Klasse) .Name kann keiner Konstanten zugewiesen werden – pixel

+0

@ dbnex14: Warum in der Welt müssten Sie es einer Konstante zuweisen? Nun, da Sie nicht den 'FullName' verwenden, könnten Sie' nameof (Class) 'verwenden. –

+1

@ dbnex14: Sie können auch 'const' durch' readonly' ersetzen und Sie können viel mehr damit machen. (Es muss nicht mehr kompilieren Zeitkonstante sein.) –

2

typeof(DummyActivity).Name 
1
nameof(DummyActivity) == new DummyActivity().GetType().Name 
+0

'nameof' unterstützt nur in C# 6.0 – Marusyk

3

Yo u kann es wie folgt in C# tun:

private static string _TAG = MethodBase.GetCurrentMethod().DeclaringType.Name; 

Dies funktioniert, weil dieses Feld initialisiert tatsächlich im statischen Konstruktor geschieht. Ie., MethodBase.GetCurrentMethod() gibt den statischen Konstruktor der Klasse zurück.

+0

Sehr geschätzt. Das funktioniert auch. Aber ich akzeptierte H.B.'s Antwort, da er zuerst antwortete und seine Lösung auch funktioniert. – pixel

0

Exakt gleiche Aussage in C# 6:

private static readonly string _TAG = nameof(DummyActivity); 
+1

Diese Frage ist ein Duplikat von http://stackoverflow.com/questions/2081612/net-determine-the-type-of-this-class-in-its-static-method. Vorausgesetzt, es gibt dort keine Antwort, noch den "Name von" -Operator erwähnend, sollten Sie Ihre Antwort dort posten und vote-to-close diese Frage als ein Duplikat dieser anderen Frage, anstatt Ihre Antwort hier zu setzen.Ehrlich gesagt, Ihre Antwort würde sowieso viel mehr Sichtbarkeit in der anderen Frage bekommen; Als solch ein häufig gestelltes Duplikat wird es stark abgestimmt und wird über die Suche viel einfacher gefunden werden. –

+0

@PeterDuniho danke, wird es tun! – CoolBots

+0

@PeterDuniho: Diese Frage erwähnt, dass der Typ unbekannt ist, und 'nameof' funktioniert nur mit bekannten Typen. –