Я думал о MulticastDelegate и Delegate, и я не понимаю, почему причина, вызывающая метод arent, является абстрактным методом MulticastDelegate. Кто-то знает?C# MulticastDelegate и Invoke Method
ответ
MulticastDelegate
тип не имеет Invoke()
способ (не BeginInvoke()
). Эти методы автоматически предоставляются в фактическом delegate
типах во время выполнения. Поэтому наиболее очевидной причиной для вопроса «почему не является метод Invoke()
в MulticlassDelegate
с пометкой abstract
» является то, что такого метода нет.
Если вы спрашиваете, почему этот метод не находится в MulticlassDelegate
(а затем помечен abstract
), то я бы спросил вас: как это могло быть? Каждому типу делегата нужен свой собственный метод Invoke()
, потому что подпись этого метода зависит конкретно от подписи типа делегата. Никакой базовый класс не может предоставить этот тип.
Наконец, отметим, что MulticlassDelegate
типа является одним из нескольких «особых» типов в .NET, и явно предназначен не наследоваться кодом пользователя. Не он, ни какой-либо объявленный подкласс типа delegate
. Поскольку наследование невозможно, на самом деле не имеет значения, является ли элемент abstract
; это никого не принесло бы, даже если бы это было так.
Класс Делегат является базовым классом для типов делегатов. Однако только система и компиляторы могут быть получены явно из класса Delegate или из класса MulticastDelegate. Также недопустимо выводить новый тип из типа делегата. Класс Delegate не считается типом делегата; это класс, используемый для получения типов делегатов.
Большинство языков реализует ключевое слово делегата, а компиляторы для этих языков могут быть получены из класса MulticastDelegate; поэтому пользователи должны использовать ключевое слово delegate, предоставленное языком.
- Примечание:
общеязыковой среде выполнения предоставляет метод Invoke для каждого типа делегата, с той же подписью, как делегат. Вам не нужно явно вызывать этот метод из C#, Visual Basic или Visual C++, потому что компиляторы автоматически его называют. Метод Invoke полезен при отражении, когда вы хотите найти подпись типа делегата.
- 1. C# Invoke Method Console Write Demo
- 2. Invoke method by MethodInfo
- 3. Invoke method using WcfTestClient
- 4. Invoke method, Converting
- 5. invoke void method
- 6. Invoke varargs method
- 7. Invoke Java Method
- 8. Invoke private method из класса
- 9. Invoke private method with java.lang.invoke.MethodHandle
- 10. invoke virtual method null context.getSystemService
- 11. ActionListener invoke while loop method
- 12. Invoke method with viewing Codeigniter
- 13. C# BackgroundWorker и Invoke
- 14. MulticastDelegate in ObjectiveC
- 15. invoke bean method on p: dialog show
- 16. добавить делегатов и вызвать MulticastDelegate путем отражения
- 17. String to method (invoke) throws a Exception
- 18. JMockit: howto invoke custom method of MockUp
- 19. C# Ярлык Видимый и Invoke
- 20. указатели между C# и C++ - p/invoke
- 21. P/Invoke C# и native C++
- 22. HTTPClient POST method C#
- 23. Есть ли делегат, который не является MulticastDelegate в C#?
- 24. Invoke функция C из C# с помощью P/Invoke
- 25. P/Invoke C# to C++
- 26. C# P/Invoke keyboard_event
- 27. C# streamwriter invoke
- 28. C#: - P/invoke подпись
- 29. C# MethodeInfo Invoke
- 30. C# WebBrowser Invoke issue
Почему вы думаете, что это должен быть абстрактный метод? – Tim
Поскольку все делегаты реализуют один и тот же вызов, поэтому я могу переопределить метод invoke для моего делегата ... – StevenS
Нет, метод Invoke() для каждого делегата отличается. Автоматически генерируемый компилятором из объявления делегата, он имеет те же аргументы. Поэтому вы никогда не можете назвать это неправильным. И это не может быть абстрактным. –