c#:反射訪問私有變量

反射是反射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的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章