Найти protected метод после наследования в c#

171
12 января 2019, 05:00

Есть класс ApplicationClass с методом CustomMethod:

public class ApplicationClass : MonoBehaviour 
{
    protected void CustomMethod()
    {
        //любой код
    }
}

От него наследуется NewClass:

public class NewClass : ApplicationClass 
{
    private void Awake()
    {
        ApplicationController.ScriptAdd(this);
    }
}

NewClass при создании добавляет себя в массив scriptArr класса ApplicationController. А ScriptCustomMethod вызывает необходимые методы по требованию:

public class ApplicationController : MonoBehaviour
{
    private static MonoBehaviour[] scriptArr;
    public static void ScriptAdd(MonoBehaviour script)
    {
        Array.Resize(ref scriptArr, scriptArr?.Length + 1 ?? 1);
        scriptArr[scriptArr.Length - 1] = script;
    }
    public static void ScriptCustomMethod(string methodName, object[] arg)
    {
        if (scriptArr == null) return;
        for (int i = 0; i < scriptArr.Length; i++)
        {
            var dynMethod = scriptArr[i].GetType().GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance);
            dynMethod?.Invoke(scriptArr[i], arg);
        }
    }
}

Нужно вызвать CustomMethod из NewClass используя ScriptCustomMethod:

private void Update()
{
    ApplicationController.ScriptCustomMethod("CustomMethod", new object[] { });
}

Но найти его и вызвать используя различные комбинации BindingFlags не получается. Если CustomMethod переместить из ApplicationClass в NewClass, то вышеприведенный код работает.

Answer 1

Нужно было объявить:

private static ApplicationClass[] scriptArr;

Вместо:

private static MonoBehaviour[] scriptArr;
READ ALSO
Элементы массивов в Unity

Элементы массивов в Unity

Доброго времени суток

146
Как узнать, что в 1С произошла ошибка?

Как узнать, что в 1С произошла ошибка?

Мне нужно идентифицировать если произошла ошибка в программе 1сНапример если служба выключена, то 1с выдаст ошибку (определенное окно)

181
Как сделать элемент Datetime с маской

Как сделать элемент Datetime с маской

Как можно сделать элемент DateTime в WPF, так чтобы не надо было вводить вручную точкиС маской какой-то например

150
Редактировать базу, после master-detail

Редактировать базу, после master-detail

такой вопросЕсть две БД, настроил master-detail, то есть это все работает правильно, открывает два DataGridView и при переходе по позициями, происходит...

186