Csharp/CSharp Tutorial/Reflection/Property
Get/set a property using a PropertyInfo
<source lang="csharp">using System; using System.Reflection; using System.Windows.Forms;
public class Class1 { static void Main( string[] args ) { Type type = typeof(MyClass); object o = Activator.CreateInstance(type); //get and set a property using a PropertyInfo PropertyInfo property = type.GetProperty("Text"); property.SetValue(o, "www.softconcepts.ru", null); string text = (string)property.GetValue(o, null); Console.WriteLine(text); EventInfo eventInfo = type.GetEvent("Changed"); eventInfo.AddEventHandler(o, new EventHandler(Class1.OnChanged)); ((MyClass)o).Text = "New Value"; } private static void OnChanged(object sender , System.EventArgs e) { Console.WriteLine(((MyClass)sender).Text); } } public class MyClass { private string text; public string Text { get{ return text; } set { text = value; OnChanged(); } } private void OnChanged() { if( Changed != null ) Changed(this, System.EventArgs.Empty); } public event EventHandler Changed; }</source>
List Properties
<source lang="csharp">using System; using System.Reflection; public interface IFaceOne {
void MethodA();
} public interface IFaceTwo {
void MethodB();
} public class MyClass: IFaceOne, IFaceTwo {
public enum MyNestedEnum{} public int myIntField; public string myStringField; public void myMethod(int p1, string p2) { } public int MyProp { get { return myIntField; } set { myIntField = value; } } void IFaceOne.MethodA(){} void IFaceTwo.MethodB(){}
} public class MainClass {
public static void Main(string[] args) { MyClass f = new MyClass(); Type t = f.GetType(); PropertyInfo[] pi = t.GetProperties(); foreach(PropertyInfo prop in pi) Console.WriteLine("Prop: {0}", prop.Name); }
}</source>
Prop: MyProp
Using Type.GetProperties() to Obtain an Object"s Public Properties
<source lang="csharp">using System; class MainClass {
static void Main() { DateTime dateTime = new DateTime(); Type type = dateTime.GetType(); foreach ( System.Reflection.PropertyInfo property in type.GetProperties()) { System.Console.WriteLine(property.Name); } }
}</source>