Feedback

C# - Public Fields und Properties via Reflection lesen

Veröffentlicht von am 15.06.2012
(0 Bewertungen)
Sinn und Zweck

Immer wieder kommt es vor, das man Werte innerhalb eines Objektes manipulieren möchte, ohne den exakten Ablauf zur Compile-Zeit zu kennen.
Beispiele:
- Zugriff auf Strukturen abhängig von Bedingungen zur Laufzeit; zum Beispiel Daten Import/Export.
- die Initialisierung von Strings ("" statt null) oder Listen (li = new List<String>() statt li = null).
Zu diesem Zweck sind eine Reihe von "generischen" Funktionen entstanden.

Funktion
GetFielValue erlaubt das Lesen auch in verschachtelten Strukturen.

Grenzen
Als externe Funktion können natürlich nur 'public' Felder und Properties ausgelesen werden.

Nutzung

public partial class Vcard {
public String FrontName { get; set; }
public String MiddleName { get; set; }
public String RearName { get; set; }
...
}

public partial class Info {
public Vcard person { get; set; }
...
}

Vcard vcard;
Info info;
String value;

vcard = new Vcard();
vcard.FrontName = "Jane";
vcard.RearName = "Doe";

info = new Info();
info.person = vcard;

value = (String)diub.Generic.xType.GetFieldValue(vcard, "FrontName");

value = (String)diub.Generic.xType.GetFieldValue(info, "person.FrontName");
GFU-Schulungen  [Anzeige]

VB.NET Aufbau

Sie verfügen nach der Schulung über fundierte Kenntnisse in der Arbeit mit objektorientierten Modellen in VB.NET und können wiederverwendbare Komponenten eigenständig erzeugen.

C# 2017/2015/2013 Grundlagen

Nach Abschluss des Kurses sind Ihnen die Datentypen und Klassenbibliotheken von C# bekannt. Außerdem sind Sie in der Lage, mit Variablen umzugehen und deren Typen zu konvertieren. Sie definieren Namespaces und setzen diese ein, Sie erstellen eigene Klassen  und bauen Trouble Shooting ein.

public class xType {

	public static Object GetFieldValue(Object Obj, String FieldName) {
		int i;
		String[] part_names;
		Object sub_obj;
		Type type;
		FieldInfo fi;
		PropertyInfo pi;

		part_names = FieldName.Split('.');
		sub_obj = Obj;

		for (i = 0; i < part_names.Length; i++) {
			type = sub_obj.GetType();
			fi = type.GetField(part_names[i]);
			if (fi != null) {
				sub_obj = fi.GetValue(sub_obj);
			} else {
				pi = type.GetProperty(part_names[i]);
				sub_obj = pi.GetValue(sub_obj, null);
			}
		}
		return sub_obj;
	}
}

Abgelegt unter public, field, property, reflection, generic.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!