c#:反射访问私有变量

    xiaoxiao2022-06-23  16

    反射是反射dll程序集中的信息 用反射可以做几件事,下面演示如何访问private

    比如这有一个Class Library 叫TicketLibrary 里面有一个Class叫TicketInfo TicketInfo.cs 里面有一个叫ticketList的private static List

    namespace ReflectTest { public class TicketInfo { private static List<String> ticketList = new List<String>() { "T1","T2","T3","T4","T5","T6","T7","T8","T9","T10", "T11","T12","T13","T14","T15","T16","T17","T18","T19","T20", "T21","T22","T23","T24","T25","T26","T27","T28","T29","T30", "T31","T32","T33","T34","T35","T36","T37","T38","T39","T40", "T41","T42","T43","T44","T45","T46","T47","T48","T49","T50" }; } }

    正常是无法直接访问该变量的 但是可以使用反射 Program.cs

    static void Main(string[] args) { try { Assembly assembly = Assembly.LoadFrom(@"..\..\..\TicketLibrary\bin\Debug\TicketLibrary.dll"); object obj = assembly.CreateInstance("ReflectTest.TicketInfo"); Type type = obj.GetType(); FieldInfo fieldInfo = type.GetField("ticketList", BindingFlags.NonPublic | BindingFlags.Static); object value = fieldInfo.GetValue(null); Console.WriteLine(value.ToString()); Console.WriteLine((value as List<String>).Count); foreach (String a in (value as List<String>)) { Console.Write(a + " "); } Console.WriteLine(); //MethodInfo method = type.GetMethod("GetAge", BindingFlags.NonPublic | BindingFlags.Instance); //var methodValue = method.Invoke(obj, null); //Console.WriteLine(methodValue.ToString()); //object[] customAtt = assembly.GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); //foreach(var customAttribute in customAtt) //{ // Console.WriteLine(((AssemblyDescriptionAttribute)customAttribute).Description); //} } catch (Exception e) { Console.WriteLine(e.Message); } }

    Assembly.LoadFrom 的是上面工程的dll路径 下面注释的两端代码一个是获取私有函数的 一个是获取AssemblyInfo的

    转载请注明原文地址: https://ju.6miu.com/read-1123094.html

    最新回复(0)