Что такое делегат? [закрыто]

Если другие таблицы имеют внешний ключ в вашей таблице, вы не можете напрямую переименовать столбец с помощью таблицы alter, это вызовет следующую ошибку: [HY000] [1025] Ошибка при переименовании xxx в yyy (errno: 150). Вы должны :

  • отбрасывать внешние ключи из других таблиц, указывающих на первичный ключ, который вы хотите переименовать
  • переименовать первичный ключ
  • добавить чужой столбец другим таблицы

При переименовании таблицы в Intellij она генерирует код, который нужно удалить, и добавьте внешний ключ.

143
задан Alex.K. 5 December 2018 в 09:14
поделиться

6 ответов

Мне нравится думать о делегате как «указатель на функцию». Это возвращается в дни C, но идея все еще держит.

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

Вот Ссылка для C # Вы можете посмотреть:

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

public static double CalcTotalMethod1(double amt)
{
    return amt * .014;
}

public static double CalcTotalMethod2(double amt)
{
    return amt * .056 + 42.43;
}

Мы могли бы объявить подпись делегата, как это:

public delegate double calcTotalDelegate(double amt);

, а затем мы могли бы объявить метод, который принимает делегат как параметр, такой как этот:

public static double CalcMyTotal(double amt, calcTotalDelegate calcTotal)
{
    return calcTotal(amt);
}

, и мы могли бы позвонить Метод метод CALTMYTOTAL , проходящий в методе делегата, мы хотели использовать.

double tot1 = CalcMyTotal(100.34, CalcTotalMethod1);
double tot2 = CalcMyTotal(100.34, CalcTotalMethod2);
Console.WriteLine(tot1);
Console.WriteLine(tot2);
164
ответ дан 23 November 2019 в 22:31
поделиться

Делегат - это просто указатель функции.
Просто поместите вам назначить метод, который вы хотите запустить свой делегат. Позже в коде вы можете вызвать этот метод через Invoke.

Какой-то код для демонстрации (написал это из памяти, так что синтаксис может быть выключен)

delegate void delMyDelegate(object o);

private void MethodToExecute1(object o)
{
    // do something with object
}

private void MethodToExecute2(object o)
{
    // do something else with object
}

private void DoSomethingToList(delMyDelegate methodToRun)
{
    foreach(object o in myList)
        methodToRun.Invoke(o);
}

public void ApplyMethodsToList()
{
    DoSomethingToList(MethodToExecute1);
    DoSomethingToList(MethodToExecute2);
}
18
ответ дан 23 November 2019 в 22:31
поделиться

Взятые отсюда

Q Что такое делегаты?
A Когда объект получает запрос, объект может либо обрабатывать сам запрос или передавать запрос на второй объект, чтобы сделать работай. Если объект решает пройти запрос, вы говорите, что объект отправил ответственность за обработку запроса на второй объект.

Или, как простой псевдо пример: что-то отправляет запрос на Object1. Object1 затем пересылает запрос и себя на объект2 - делегат. Object2 обрабатывает запрос и выполняет некоторую работу. (Примечание: ссылка выше дает хорошие примеры)

15
ответ дан 23 November 2019 в 22:31
поделиться

Несмотря на то, что не совсем «указатель функции», может выглядеть делегат, как это является динамическим языком, таким как PHP:



$func = 'foo';
$func();

function foo() {
    print 'foo';
}

или в JavaScript, вы можете сделать что-то вроде:


var func = function(){ alert('foo!'); }
func();

-2
ответ дан 23 November 2019 в 22:31
поделиться

Подумайте о делегате как об упрощенной реализации схемы командования.

4
ответ дан 23 November 2019 в 22:31
поделиться

. Отличное объяснение и практическая реализация Шаблон делегата можно найти в коллекциях Google , пересылающие классы (также, рисунок декоратора).

1
ответ дан 23 November 2019 в 22:31
поделиться