利用反射调用子类的函数

使用Unity编写程序的时候,经常会遇到很多统一销毁的问题,之前用过Lua,lua主要是表的概念,可以将函数放在表中,然后for循环那个表,然后调用里面 的函数。

如果继承了MonoBehaviou可以使用周期函数的Destroy函数,如果没有继承的话,就可以使用反射来调用子类的函数了。

示例代码如下:

        var types = Assembly
        .GetExecutingAssembly()
        .GetTypes()
        .Where(item => item.IsSubclassOf(typeof(ModelBase))).ToList();

        for (int i = 0; i < types.Count; i++)
        {
            Type sp = types[i];
            PropertyInfo[] scripts = sp.GetProperties(BindingFlags.Static | BindingFlags.Public);
            if (scripts.Length == 0)
            {
                Log.Warning("scripts:" + sp.Name);
                continue;
            }
            List scriptLsit = scripts.Where(v => v.Name == "inst" ||
            v.Name == "Inst" ||
            v.Name == "Instance").ToList();
            if (scriptLsit.Count != 1)
            {
                Log.Error(sp.Name + "+" + scriptLsit.Count);
                continue;
            }
            PropertyInfo script = scriptLsit[0];
            ModelBase module = script.GetValue(null, null) as ModelBase;
            if (null != module)
            {
                module.Dispose();
            }
            else
            {
                Debug.LogError(script.Name);
            }
        }

 

你可能感兴趣的:(计算机相关基础,C#)