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