Что такое Отправка Метода?

Я думаю, что это должно работать. Это могло бы быть выключено на наклонных чертах. Не уверенный, если они необходимы или нет.

string url = Request.ApplicationPath + "/" + photosLocation + "/" + files[0];
31
задан ProfK 26 November 2009 в 20:26
поделиться

2 ответа

Сначала скажем, что такое сообщение и метод:

  • сообщение - это имя, которое может быть отправлено от одного объекта к другому, возможно, с дополнительными объектами в качестве аргументов. . Например в

     снятие средств со счета: 100
    

    Сообщение имеет вид отзыва: (Синтаксис Smalltalk.) (Другие языки могут писать account.withdraw (100) .) Объект, получающий сообщение, в этом примере учетная запись называется получателем .

  • Метод - это реализация, которая может быть вызвана в ответ на сообщение.

Эти идеи разделяются между множество объектно-ориентированных языков, иногда под разными именами. Например, C ++ вызывает сообщение как «виртуальную функцию-член».

Теперь:

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

    • Такие языки, как Smalltalk, которые имеют классы и единственное наследование, обращаются к классу получателя. Если метод определен в этом классе, этот метод вызывается. В противном случае алгоритм проверяет уникальный суперкласс и т. Д.

    • В C ++ метод по-прежнему определяется классом получателя, но поскольку класс может иметь несколько суперклассов, проблема выбора метода для вызова более сложна. .

    • В таких языках, как Self, у которых есть методы, но нет классов, метод либо находится в названном слоте на самом приемнике, либо, возможно, находится в прототипе, из которого был клонирован объект.

    • В более продвинутых объектно-ориентированных языках алгоритм диспетчеризации методов проверяет не только получателя, но и аргументы , которые передаются вместе с сообщением. Эту идею иногда называют «мультиметодами». (В какой-то степени этот метод может быть смоделирован с использованием того, что Smalltalk называет двойной диспетчеризацией , но это требует затрат на программирование и производительности.) Я считаю, что все языки Сесил, Дизель и Дилан используют некоторую форму многометодной диспетчеризации, но я ' м балансирует на грани моего опыта.

28
ответ дан 27 November 2019 в 22:35
поделиться

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

Часть принятия решения при отправке метода может быть чисто во время выполнения (например, на динамическом языке) , чисто во время компиляции (например, вызов статического метода в C # / Java) или того и другого (вызов виртуального метода в C # / Java).

Различные языки могут иметь существенно разные подходы к диспетчеризации методов.

12
ответ дан 27 November 2019 в 22:35
поделиться
Другие вопросы по тегам:

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