2011-10-10 17 views
22

Sé el nombre de una propiedad en mi clase C#. ¿Es posible utilizar la reflexión para establecer el valor de esta propiedad?¿Puedo establecer un valor de propiedad con Reflection?

Por ejemplo, supongamos que sé que el nombre de una propiedad es string propertyName = "first_name";. Y existe realmente una propiedad llamada first_name. ¿Puedo configurarlo usando esta cadena?

+0

Es una propiedad estática? – BoltClock

+1

Cambiaría el nombre de la pregunta a: "¿Es posible utilizar la reflexión para establecer el valor de una propiedad?" Y la respuesta es: sí, es posible. Puedes hacerlo. –

+0

@Snowbear No me permitía usar Question en el título, y necesitaba 15 caracteres. Si no te gusta el título, cámbialo. – user489041

Respuesta

57

Sí, puede usar la reflexión, simplemente busquela con Type.GetProperty (especificando las banderas de encuadernación si es necesario), luego llame al SetValue de manera apropiada. Muestra:

using System; 

class Person 
{ 
    public string Name { get; set; } 
} 

class Test 
{ 
    static void Main(string[] arg) 
    { 
     Person p = new Person(); 
     var property = typeof(Person).GetProperty("Name"); 
     property.SetValue(p, "Jon", null); 
     Console.WriteLine(p.Name); // Jon 
    } 
} 

Si no es una propiedad pública, tendrá que especificar BindingFlags.NonPublic | BindingFlags.Instance en la llamada GetProperty.

-1

a continuación es mi fragmento examen escrito en C# .NET

using System; 
using System.Reflection; 

namespace app 
{ 
    class Tre 
    { 
     public int Field1 = 0; 
     public int Prop1 {get;set;} 
     public void Add() 
     { 
      this.Prop1+=this.Field1; 
     } 
    } 
    class Program 
    { 

     static void Main(string[] args) 
     { 
      Tre o = new Tre(); 
      Console.WriteLine("The type is: {0}", o.GetType()); //app.Tre 

      Type tp = Type.GetType("app.Tre"); 
      object obj = Activator.CreateInstance(tp); 

      FieldInfo fi = tp.GetField("Field1"); 
      fi.SetValue(obj, 2); 

      PropertyInfo pi = tp.GetProperty("Prop1"); 
      pi.SetValue(obj, 4); 

      MethodInfo mi = tp.GetMethod("Add"); 
      mi.Invoke(obj, null); 

      Console.WriteLine("Field1: {0}", fi.GetValue(obj)); // 2 
      Console.WriteLine("Prop1: {0}", pi.GetValue(obj)); // 4 + 2 = 6 

      Console.ReadLine(); 
     } 
    } 
} 
Cuestiones relacionadas