震惊 !!我反射了生命周期 --反射

今天测试反射的时候突发奇想  调用了untiy  里面的生命周期  !!! 

可能就有人会问 什么是反射?

                        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​         

C# 反射(Reflection)超详细解析_c# reflection-CSDN博客   可以参考  

https://www.cnblogs.com/OtusScops/p/16746498.html

.net 很多东西都是从 java 里面过来的  可以看看java 的   

什么是反射 (Reflection)?可以用它做什么?-CSDN博客

首先 我们可以知道 C# Type 里面的属性

int memSize;//当前类的实例的内存大小 
List<FieldInfo> datas; 
List<MethodInfo> funcs;

一个集合里面放置所有的参数  

一个集合是里面的函数方法      最基础的构成

class MethodInfo 
{ string methName; 
int type;//静态/普通 
int offset;//函数代码指令的地址 }

函数的构成

class FieldInfo 
{ string filedName; 
int type; 
int filedSize;//该字段内存大小 
int offset;//内存偏移 }

参数

Type t = new Type(); 

t.addFiled("hp" , 100); //放入参数

t.addFiled("atk" , 10);  

t.addMethod("GetHit" , 成员方法 , 地址);  //放入函数

t.addMethod("Healing" , 成员方法 , 地址);

具体流程

好了 你已经会了 

现在外面要调用Type 里面的函数  来获取具体的类

string name = "当前组件名"; 

Type t = System.Type.GetType(name);//它会返回name对应类的描述,这也是为什么脚本不能重名

 gameObject.AddComponent(t);

ok 下一个阶段

public class Demo: MonoBehaviour  //定义一个类 
{
    public GameObject prefab;  //预制体


    public int hp = 100;//血量
    public int atk = 10;

    public GameObject New;  //新的预制体


}

  private int Hurt(int atk)
    {
        this.hp -= dmg;
        Debug.Log("Hurt");
        return 11;
    }

 void Start()
    {
        Debug.Log(12);




    }

  我们先正常的调用反射

   Type type = Type.GetType("Client");//通过字符串找到类
  //利用描述实例化一个对象
        var instance = Activator.CreateInstance(type);

 FieldInfo fieldInfo = type.GetField("hp");//获取字段
        fieldInfo.SetValue(instance, 50);//获取这个实例的字段
   Debug.Log((instance as Client).hp);

  //调用成员函数
        MethodInfo methodInfo = type.GetMethod("GetHit", BindingFlags.NonPublic | BindingFlags.Instance);
        System.Object[] funcParas = new System.Object[1];//方法所需要的方法
                    funcParas[0] = 10;//具体参数
        System.Object ret = methodInfo.Invoke(instance, funcParas);//调用

可以反射 逻辑没问题

注意

我在这个静态函数去生成一个Cube

恭喜你已经会反射了

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值