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();
C#反射 如何获取和赋值基础
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.