Тема: Клас як колбек
Привіт.
Я зара працюю з одним сдк, котре призначене для роботи с онлайн-сервісами. І от, коли я хочу виконати якусь операцію, як то зберегти якісь дані в хмарі, або отримати дані з хмари, то я маю викликати спеціальний метод, котрий, серед різних аргументів, також, приймає екземпляр класу в якості колбеку. Виглядає це якось так
service.GetTopNRankings(arg1, arg2, new CallBackClass());І ось цей CallBackClass потрібно створювати самому, наслідуючись від спеціального інтерфейсу, що є частиною того сдк.
class CallBackClass : ServiceCallBack 
{
 public void OnSuccess(object response){}
 public void OnException(Exception e){}
}І той інтерфейс має два методи, котрі потрібно реалізувати.
Проблему заключається в тому, що дуже часто, після того, як виконається запит, я маю щось зробити з цими даними. Наприклад, внести дані в якісь текстові поля. І всі посилання на текстові поля знаходяться в класі, з котрого я викликаю отой метод.
class MyClass 
{
 public TextField textField;
 public void Start()
 {
  //виклик методу сервіса
 }
}І так, як я отримую дані в тому, окремому класі, то я не маю доступу до всіх цих текстових полів. Робити ті поля статичними якось не комельфо. Тому я вирішив передавати в той, новий клас, метод, котрий приймає відповідь від серверу і робить з ним все, що треба. Ну і зрозуміло, що той метод знаходиться в початковому класі.
class MyClass()
{
 public TextField textField;
 public void Start()
 {
  service.GetTopNRankings(arg1, arg2, new CallBackClass(SetData))
 }
 public void SetData(object response)
 {
  textField.text = (string) response; // наприклад
 }
 class CallBackClass : ServiceCallBack
 {
   Action<object> _callBack;
   public CallBackClass(Action<object> callBack=null)
   {
    _callBack=callBack;
   }
   public void OnSuccess(object response)
   {
    if(_callBack!=null)
    _callBack(response);
   }
   public void OnException(Exception e){}
 }
}Але що, якщо мені тре робити щось з текстовими полями в разі виникнення екзепшену? Додавати ще одне поле типу Action? А якщо дія повинна залежати від типу помилки, а типів помилок існує аж 10, то це ж доведеться аж 10 полів створювати під кожен тип помилки.
Як то мона зробити вишуканіше?