2016-03-30 7 views
-2

Ich habe eine Klasse mit einem Feld, das immer die gleiche Zeichenfolge zurückgibt:Wie erhalten Sie dieses Feld mit Reflektion?

public class A 
{ 
    // cool C# 6.0 way to implement a getter-only property. 
    public string MyString => "This is a cool string!" 
} 

Gibt es eine Möglichkeit Reflexion (oder irgendeine andere Weise, die ich vielleicht fehlt) unter Verwendung von MyString zurückzukehren, ohne eine neue Instanz instanziiert mit der EIN? Die Signatur kann nicht geändert werden, so dass sie statisch ist, ist keine Option.

+1

Möchten Sie einen Eigenschaftsnamen oder einen Eigenschaftswert? Für Wert (vielleicht) brauchen Sie offensichtlich eine Instanz. –

+1

Machen Sie es zu einer statischen Eigenschaft – ElGavilan

+2

Dies ist nur syntaktische Zucker, die den Initialisierungscode in den Konstruktor zur Kompilierzeit bewegt. Das allein gibt dir die Antwort, die du brauchst: Nein, du kannst nicht, du brauchst eine Instanz. – CodeCaster

Antwort

3

Nein, es ist eine Instanzeigenschaft, wenn es eine statische Eigenschaft wäre, dann könnten Sie ja, aber ansonsten müssen Sie das Objekt instanziieren, um den tatsächlichen Rückgabewert zu erhalten, weil Sie der GetValue-Methode eine Instanz zur Reflektion bereitstellen müssen. und übergeben Sie null für statische Eigenschaften

3

Nein, da die Eigenschaft in der Frage a Instanz ein (nicht static) nolens volens, müssen Sie eine Instanz zur Verfügung stellen. So erhalten Sie die Eigenschaft über Reflection:

A myA = new A(); 

... 

String value = myA.GetType().GetProperty("MyString").GetValue(myA) as String; 

Sie können das Objekt als static, und in diesem Fall erklären Sie haben noch keine Instanzen haben. Beachten Sie, dass Reflection keine Instanz möchte:

public class A { 
    // note "static" 
    public static string MyString => "This is a cool string!"; 
} 
... 
String value = typeof(A).GetProperty("MyString").GetValue(null) as String; 
+0

Wenn es statisch wäre, würden Sie überhaupt keine Reflexion benötigen. – mason

+0

@ Mason: sicher, du hast Recht, aber die Frage ist über "... Feld mit * Reflexion * bekommen" so habe ich * Reflection * :) –

+0

Es sagt auch "oder eine andere Art, wie ich sein könnte fehlt. ". Und Reflexion gibt dir hier keinen wirklichen Wert, es verlangsamt nur die Dinge und macht sie komplizierter. – mason

Verwandte Themen