Недавно я обнаружил, что мне нужно вызвать защищенный метод извне класса (короткая причина: мне нужно было остановить объект от запуска события 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 });
}
Это также хорошо работало.Есть ли какая-то причина, почему я должен использовать ту или иную?Пока они оба работают нормально, но, очевидно, они не совсем чистые решения, поэтому я хотел бы знать, не вызовет ли какой-либо из них проблемы в будущем.