反射的一点理解

 我理解的反射,大概就是各种“找找找”。以下“类名”,均为Type类型(由“名称空间.类名”构成)。

  1. 根据类对象,找到类名。
  2. 根据一个字符串,找到类名;
  3. 有了类名,找到它包含的属性、方法。
  4. 有了类名,还可以创建它的实例。

会了这几点,应该就算是会了反射。怎么用,就看你自己的理解了。

对于1、3,的应用,例子可以参考另一篇文章

对于2、4的应用,例子如下:

using System;
using System.Reflection;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string s;
            //当前程序集
            //mynamespace = Assembly.GetEntryAssembly().GetName().Name;
            Console.WriteLine("输入名称空间名称");
            s = Console.ReadLine();
            s += ".";
            Console.WriteLine("输入类名称");
            s += Console.ReadLine();
            //得到类名,取程序集,创建对象
            var o = (MyClass.MyObject)Type.GetType(s).Assembly.CreateInstance(s);
            o.show();
        }
    }
}
namespace MyClass
{
    public interface MyObject
    {
        public void show();
    }
    public class Test:MyObject
    {
        int x;
        public Test()
        {
            x = 66;
        }
        public void show()
        {
            Console.WriteLine($"Assembly is {Assembly.GetEntryAssembly().GetName().Name},x={x}");
        }
    }
}

运行结果:

反射的一点理解

 

上一篇:Eclipse中Project的属性Deployment Assembly(部署程序集)消失了,不存在了,去哪儿了


下一篇:[ARM-assembly]-汇编示例:c语言翻译成汇编