script net iron gui from c# python user-interface

net - ¿Hay algo así como el getattr() de Python en C#?



python gui (4)

Existe la clase System.Reflection.PropertyInfo que se puede crear utilizando object.GetType (). GetProperties (). Eso se puede usar para sondear las propiedades de un objeto usando cadenas. (Existen métodos similares para métodos de objetos, campos, etc.)

Sin embargo, no creo que eso te ayude a lograr tus objetivos. Probablemente deberías simplemente crear y manipular los objetos directamente. Los controles tienen una propiedad Name que puede establecer, por ejemplo.

¿Hay algo así como el getattr () de Python en C #? Me gustaría crear una ventana leyendo una lista que contiene los nombres de los controles para poner en la ventana.


Sí, usted puede hacer esto...

typeof(YourObjectType).GetProperty("PropertyName").GetValue(instanceObjectToGetPropFrom, null);


También hay Type.InvokeMember .

public static class ReflectionExt { public static object GetAttr(this object obj, string name) { Type type = obj.GetType(); BindingFlags flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetProperty; return type.InvokeMember(name, flags, Type.DefaultBinder, obj, null); } }

Que podría usarse como:

object value = ReflectionExt.GetAttr(obj, "PropertyName");

o (como un método de extensión):

object value = obj.GetAttr("PropertyName");


Usa la reflexión para esto.

Type.GetProperty() y Type.GetProperties() devuelven instancias de PropertyInfo , que se pueden usar para leer un valor de propiedad en un objeto.

var result = typeof(DateTime).GetProperty("Year").GetValue(dt, null)

Type.GetMethod() y Type.GetMethods() devuelven instancias de MethodInfo , que se pueden usar para ejecutar un método en un objeto.

var result = typeof(DateTime).GetMethod("ToLongDateString").Invoke(dt, null);

Si no conoce necesariamente el tipo (que sería un poco extraño si actualiza el nombre de la propiedad), entonces podría hacer algo como esto también.

var result = dt.GetType().GetProperty("Year").Invoke(dt, null);