C#反射 如何獲取和賦值基礎

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp7
{
    class Program
    {
        static void Main(string[] args)
        {
            Stu s = new Stu() { Name = "張三" };
            Stu s1 = new Stu() { Name = "李四" };
//獲取方法屬性
            //獲取實例的對象
            Type t = s.GetType();
           
            
                Console.WriteLine(t.Name);

            Console.WriteLine("//獲取所有方法");
            var ff = t.GetMethods();
            foreach (var item in ff)
            {
                Console.WriteLine(item.Name);
            }
            Console.WriteLine("獲取所有的屬性");
            var sx = t.GetProperties();
            foreach (var item in sx)
            {
                Console.WriteLine(item.Name);
                //item.Name Name是獲取當前成員的名稱
            }
            Console.WriteLine("-----------------------");
            Console.WriteLine("-----------------------");
            //調用方法

//賦值
            //給第一個學生賦值
            sx[0].SetValue(s , "你");
            //讀取值
            Console.WriteLine("讀取第一個學生的值");
            Console.WriteLine(s.Name);
            
            Console.WriteLine("讀取第二個學生的值");
            Console.WriteLine(sx[0].GetValue(s1));

            Console.WriteLine(); Console.WriteLine(); Console.WriteLine();

            //調用    第一個值是學生信息,第二個是方法參數,沒有參數就傳null
            ff[1].Invoke(s,new object[] { "Hello","word"});

	//這個是動態加載dll文件
        static void Main(string[] args)
        {
            // 路徑E盤下的dll文件
            Assembly a = Assembly.LoadFile(@"e:\ClassLibrary1.dll");
            //獲取所有類型
            //Type[] atypess = a.GetTypes();
            //foreach (Type t1 in atypess)
            //{
            //    Console.WriteLine(t1);
            //}

            //類型全名
            var s = a.CreateInstance("ClassLibrary1.Stu");
            //類型全名
            Type t = a.GetType("ClassLibrary1.Stu");
            //要獲取的屬性名
            var name = t.GetProperty("Name");
            var age = t.GetProperty("Age");
            //賦值
            name.SetValue(s, "張三");
            age.SetValue(s, 19);

            //獲取方法
            MethodInfo m = t.GetMethod("Say");
            //調用方法,傳入對應參數
            m.Invoke(s,new object[] { "晚上"});


            Console.ReadKey();
發佈了3 篇原創文章 · 獲贊 3 · 訪問量 84
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章