Вызов защищенного метода в C # - отражение или отдельный производный класс? - PullRequest
0 голосов
/ 19 октября 2018

Недавно я обнаружил, что мне нужно вызвать защищенный метод извне класса (короткая причина: мне нужно было остановить объект от запуска события OnValueChanged, когда его значение было изменено, и это было возможно только через его защищенный Set (value, sendCallback) ()).

В итоге я нашел два решения:

1.) создать производный класс и добавить только эту функцию:

public void SetValue (float val, bool callback) { Set(val, callback); }

К счастью, класс был установлен как наследуемый, поэтому он работал.

2.) Используйте методы отражения и расширения и сделайте следующее:

public static void SetValue(this Slider slider, float val, bool callback)
    {
        MethodInfo sliderSetMethod = slider.GetType().GetMethod("Set", BindingFlags.NonPublic | BindingFlags.Instance);
        sliderSetMethod.Invoke(slider, new object[] { val, callback });
    }

Это также хорошо работало.Есть ли какая-то причина, почему я должен использовать ту или иную?Пока они оба работают нормально, но, очевидно, они не совсем чистые решения, поэтому я хотел бы знать, не вызовет ли какой-либо из них проблемы в будущем.

1 Ответ

0 голосов
/ 19 октября 2018

Я бы сказал, что вы должны использовать производный класс, потому что это то, для чего предназначены защищенные методы, и компилятор поймет любые изменения.

Использование отражения, чтобы сделать что-то, чего не сделал оригинальный авторне похоже, что это может оставить вас открытыми для других непредвиденных последствий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...