using System;
using System.Reflection;
using System.Diagnostics;
public class SecretObject
{
public string PublicProperty { get; set; }
private string PrivateProperty { get { return "Secrect"; } }
public string PublicField = "Public";
private string PrivateField = "Private";
public static string StaticField = "Static";
public void SayHello(string name)
{
Console.WriteLine("Hello, " + name);
}
}
public class CSharpLab
{
public static void Test()
{
SecretObject so = new SecretObject();
so.PublicProperty = "Open";
Analyze(so);
}
public static void Analyze(object obj)
{
Type t = obj.GetType();
Console.WriteLine("Type Name={0}", t.Name);
foreach (FieldInfo f in t.GetFields(
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.Static))
Console.WriteLine(
"Field [{0}] = {1}", f.Name, f.GetValue(obj));
foreach (PropertyInfo p in t.GetProperties(
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.Static))
Console.WriteLine("Property [{0}] = {1}",
p.Name, p.GetValue(obj, null));
foreach (MethodInfo m in t.GetMethods(
BindingFlags.Public | BindingFlags.Instance ))
{
if (m.Name == "SayHello")
{
Console.WriteLine("Method [SayHello] Found!");
foreach (ParameterInfo a in m.GetParameters())
Console.WriteLine(" - Parameter : " + a.Name);
m.Invoke(obj, new object[] { "Jeffrey" });
}
}
}
}