gpt4 book ai didi

c# - 使用/需要反射

转载 作者:太空宇宙 更新时间:2023-11-03 21:52:00 24 4
gpt4 key购买 nike

我在这个论坛中搜索了问题并找到了很好的资源。我自己写了下面的代码来理解反射的概念。

static void Main(String[] args)
{

MyClass1 mc1 = new MyClass1();
Type t = mc1.GetType();
MethodInfo mInfo = t.GetMethod("method1");
object[] o=new object[]{2};
Console.WriteLine(mInfo.Invoke(mc1, o));
NameSpace2.Class1 c1 = new NameSpace2.Class1();
Type t2 = c1.GetType();
MethodInfo[] mI2 = t2.GetMethods();
object[] o2 = new object[] {2,3};
foreach (MethodInfo m in mI2)
{
Console.WriteLine(m);
}

object x = Activator.CreateInstance(t);

Console.WriteLine(x.GetType());
Console.Read();

}

我知道通过反射,我将能够在运行时获取有关对象的类型、公共(public)方法和属性的信息,并且还能够创建该类型的对象。但我的观点是,除非并且直到我知道方法需要哪些参数作为输入,否则我将无法实现任何方法,并且这些信息仅在运行时可用。那么,反射有什么重要性,仅仅是关于一个对象的信息吗?

最佳答案

如果你需要反射,那么你的需求不能在编译时解决,而是在运行时解决。

  • 假设您正在制作一个需要模块化的很酷的应用程序,您让开发人员为您的应用程序编写插件。您无法为可能创建的每个插件编译应用程序。然后您需要使用反射加载、自省(introspection)和调用插件的对象。

  • 假设您正在为银行应用程序制作一个中间件,该中间件负责处理数据库连接并使用该数据执行一些业务逻辑。您可以为每个可用的数据库编写和编译您的中间件。或者您可以编写一次代码,然后在运行时激活和使用正确的数据库驱动程序。

  • 如果您想动态获取 WebService 的 WSDL,生成代理并在代理编译并加载到内存后立即使用 Web 服务怎么办?想不出在编译时执行此操作的方法。

  • 更好的是,如果您使用 CodeDOM 生成代码、编译、加载编译后的程序集并使用您刚刚编译的对象会怎么样?

总有一天您需要使用反射。我希望如此……

关于c# - 使用/需要反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14053906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com