我理解的反射,大概就是各种“找找找”。以下“类名”,均为Type类型(由“名称空间.类名”构成)。
会了这几点,应该就算是会了反射。怎么用,就看你自己的理解了。
对于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}"); } } }
运行结果:
原文:https://www.cnblogs.com/wanjinliu/p/13100897.html