通过网站开发工具怎么改自动跳网站,wordpress弹出服务协议窗口,济南快速排名,页游小游戏反射可以不但用来读取元数据#xff0c;还可以使用反射从编译时还不清楚的类型中动态创建程序集#xff0c;此案例摘自C#高级编程。 首先先创建一个控制台应用程序#xff0c;然后添加一个类库#xff0c;类库名称为CalculatorLib#xff0c;如下图所示#xff1a; Calcu… 反射可以不但用来读取元数据还可以使用反射从编译时还不清楚的类型中动态创建程序集此案例摘自C#高级编程。 首先先创建一个控制台应用程序然后添加一个类库类库名称为CalculatorLib如下图所示 CalculatorLib程序集中有两个方法参数是x和y一个方法返回两数之和另一个方法返回两数之差代码如下图所示
namespace CalculatorLib
{public class Calculator{public double Add(double x, double y) x y;public double Subract(double x, double y) x - y;}
}
接下来我们要在控制台车程序中实例化类Calculator并调用其中的方法。控制台中的代码如下图所示
class Program{private const string CalculatorLibPath D:/MyProjects/MyConsoleApplication1/CalculatorLib/bin/Debug/CalculatorLib.dll;private const string CalculatorLibName CalculatorLib;private const string CalculatorTypeName CalculatorLib.Calculator;static void Main(string[] args){ReflectionOld();}public static object GetCalculator(){Assembly assembly Assembly.LoadFile(CalculatorLibPath);//根据指定路径动态加载程序集return assembly.CreateInstance(CalculatorTypeName);//实例化程序集中的类}public static void ReflectionOld(){double x 3;double y 4;object calc GetCalculator();object result calc.GetType().GetMethod(Add).Invoke(calc, new object [] { x, y });object result2 calc.GetType().GetMethod(Subract).Invoke(calc,new object[] { x,y});Console.WriteLine($x y {result});Console.WriteLine($x - y {result2});Console.Read();}}
运行结果如下图所示 第二种方式是利用dynamic进行dynamic语法会比上面第一种方法简单但是处理起来消耗更多的时间和资源。关于dynamic会在以后中学习。修改代码如下图所示 class Program{private const string CalculatorLibPath D:/MyProjects/MyConsoleApplication1/CalculatorLib/bin/Debug/CalculatorLib.dll;private const string CalculatorLibName CalculatorLib;private const string CalculatorTypeName CalculatorLib.Calculator;static void Main(string[] args){ReflectionNew();}public static object GetCalculator(){Assembly assembly Assembly.LoadFile(CalculatorLibPath);//根据指定路径动态加载程序集return assembly.CreateInstance(CalculatorTypeName);//实例化程序集中的类}public static void ReflectionNew(){double x 3;double y 4;dynamic calc GetCalculator();//类型为dynamicdouble result calc.Add(x, y);Console.WriteLine($x y {result});double result2 calc.Subract(x, y);Console.WriteLine($x - y {result});Console.Read();}}
运行结果是一样的 我个人认为反射是框架级的技术由此案例为基础可以为以后组件式开发打下根基并极大的降低程序的耦合棒