C# 反射汇总

  • 根据名字获得类的Type
string className;
Type t=Type.GetType(className);
  • 获得类的构造函数,并调用
//通过反射获得类
Type t = Type.GetType(windowName);
//获得所有构造函数
ConstructorInfo[] cMethods = t.GetConstructors();
for (int i = 0; i < cMethods.Length; i++)
{
    ConstructorInfo ci = cMethods[i];
    //参数
    ParameterInfo[] paramInfos = ci.GetParameters();
    Debug.Log("该构造方法名:" + ci.Name + ", 参数个数:" + paramInfos.Length);
    if (paramInfos.Length == 3)
    {        
        //调用构造函数                    
        target = ci.Invoke(new object[] { uiObj, windowName, false }) as Window;
        break;
    }
}
  • 直接调用类的构造函数
Type t = Type.GetType(className);
target = Activator.CreateInstance(t, new object[] { uiObj, windowName }) as Window;

dll处理

  • 加载dll,并获得dll中的类
byte[] buffer = File.ReadAllBytes(path);
var assembly = Assembly.Load(buffer);
foreach (var t in assembly.GetTypes())
{
    //类+有指定类型的基类
    if (t.IsClass && t.BaseType != null && t.BaseType.Name == typeof(Window).Name)
    {         
    }
}

需求

根据对象中某个字段的字符串名称,来改变该对象某个字段的值

public class Bean
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Address;
}

var b = new Bean();
b.Name = "zcfly";
b.Age = 12;
b.Address = "China";
Debug.LogError("name1:" + b.Name + ", age1:" + b.Age + ",address1:" + b.Address);
var bType = b.GetType();
var nameP = bType.GetProperty("Name");
nameP.SetValue(b, "Jim", null);
var ageP = bType.GetProperty("Age");
ageP.SetValue(b, 333, null);
var addressM = bType.GetField("Address");
addressM.SetValue(b, "England");
Debug.LogError("name2:" + b.Name + ",age2:" + b.Age + ",address2:" + b.Address);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iningwei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值