第15章 .NET中的反射

时间:2023-03-08 17:05:51
第15章 .NET中的反射
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection; namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
//TestClass.ShowMsg();
//TestClass.ShowMsg(new Message()); //Assembly asm = Assembly.GetExecutingAssembly();
//Object obj=asm.CreateInstance("ConsoleApplication2.Calculator",true);
//Calculator cal=(Calculator)obj; //Object[] parameters = new Object[2] { 3, 5 };
//Object obj1 = asm.CreateInstance("ConsoleApplication2.Calculator", true, BindingFlags.Default, null, parameters, null, null);
//Calculator cal = (Calculator)obj1; //Type t = typeof(Calculator);
//Calculator cal = new Calculator(3, 5);
//int result = (int)t.InvokeMember("Add", BindingFlags.InvokeMethod, null, cal, null);
//Console.WriteLine("result:" + result); //Type t = typeof(Calculator);
//Object[] parameters = new Object[2] { 3, 5 };
//t.InvokeMember("Add", BindingFlags.InvokeMethod, null, t, parameters); //Type t = typeof(Calculator);
//Calculator cal = new Calculator(3, 5);
//MethodInfo mi = t.GetMethod("Add", BindingFlags.Public | BindingFlags.Instance);
//mi.Invoke(cal, null); //Type t = typeof(Calculator);
//Object[] parameters = new Object[2] { 6, 9 };
//MethodInfo mi = t.GetMethod("Add", BindingFlags.Public | BindingFlags.Static);
//mi.Invoke(null, parameters); Console.ReadKey();
}
} public class Message { } public class TestClass
{
[Obsolete("请使用新方法")]
public static void ShowMsg()
{
Console.WriteLine("旧MSG");
} public static void ShowMsg(Message msg)
{
Console.WriteLine("新MSG");
}
} public class Calculator
{
private int x;
private int y;
public Calculator()
{
x = ;
y = ;
Console.WriteLine("Calculate()");
} public Calculator(int x, int y)
{
this.x = x;
this.y = y;
Console.WriteLine("Calculate(int x, int y)");
} public int Add()
{
int total = ;
total = x + y;
Console.WriteLine("invoke instance method");
Console.WriteLine(string.Format("{0}+{1}={2}", x, y, total));
return total;
} public static void Add(int x, int y)
{
int total = x + y;
Console.WriteLine("invoke static method");
Console.WriteLine(string.Format("{0}+{1}={2}", x, y, total));
}
}
}