передача пусто универсальному классу

Ответ был прост. Я не знал о разрешениях по умолчанию для баз данных реального времени firebase. Разрешения по умолчанию:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}
{
  "rules": {
    ".read": true,
    ".write": true
  }
}

Но если я хочу попробовать выполнить http-запрос во время разработки, я могу изменить разрешения на:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

Вы можете изменить это в раздел базы данных firebase -> rules

Я получил ответ благодаря этому сообщению Отказано в разрешении Firebase

5
задан Steven Evers 20 March 2009 в 23:08
поделиться

2 ответа

Я заново продумал бы Ваш дизайн немного.

При реализации обработки в базовом классе Вы могли бы разделить ее на подклассы с 2 альтернативами, которые были бы почти interchangable.

Первое могло быть похожим на Ваш, где это берет Операцию, которая возвращает значение. (Я переделал бы это для использования Func<T> вместо того, чтобы иметь Ваш собственный тип делегата, все же.

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

С этим подходом Вы могли назвать это как:

private void DoSleep()
{
    Thread.CurrentThread.Sleep(5000);
}
private int ReturnSleep()
{
    Thread.CurrentThread.Sleep(5000);
    return 5000;
}
...
{
    var actionWindow = new OperatingWindowAction(this.DoSleep);
    actionWindow.Execute();
    var funcWindow = new OperatingWindowFunc<int>(this.ReturnSleep);
    funcWindow.Execute();
    int result = funcWindow.Result;
}

Это посмотрело бы что-то как:

public abstract partial class OperatingWindowBase : Form
{
    public void Execute()
    {
        // call this.OnExecute(); asyncronously so you can animate
    }
    protected abstract void OnExecute();
}

public class OperatingWindowFunc<T> : OperatingWindowBase
{
    Func<T> operation;
    public T Result { get; private set; }
    public OperatingWindowFunc<T>(Func<T> operation)
    {
        this.operation = operation;
    }
    protected override OnExecute()
    {
        this.Result = operation();
    }
}

public class OperatingWindowAction
{
    Action operation;
    public OperatingWindow(Action operation)
    {
        this.operation = operation;
    }
    protected override OnExecute()
    {
        operation();
    }
}
4
ответ дан 13 December 2019 в 22:16
поделиться

Нет, необходимо будет создать перегрузку, чтобы сделать это.

например.

public operatingWindow(Action action) 
{ 
    m_Operation=() => { action(); return null; }
}

Также Вы не должны определять своего собственного делегата, можно использовать Func<T> и Действие.

6
ответ дан 13 December 2019 в 22:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: