delegates
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
delegates [2018/02/19 18:52] – wolfgangriedmann | delegates [2018/07/11 09:36] (current) – [Why Delegates] wolfgangriedmann | ||
---|---|---|---|
Line 4: | Line 4: | ||
Delegates are a new concept in the X# language - in VO they don't exist. | Delegates are a new concept in the X# language - in VO they don't exist. | ||
+ | |||
In every language there is sometimes the need to pass code as parameter to a function. VO has codeblocks, therefore normally you don't need function pointers, but pass codeblocks instead. | In every language there is sometimes the need to pass code as parameter to a function. VO has codeblocks, therefore normally you don't need function pointers, but pass codeblocks instead. | ||
+ | |||
The only real use of function pointers in the VO language is the interface to Windows API functions or other DLL calls. | The only real use of function pointers in the VO language is the interface to Windows API functions or other DLL calls. | ||
- | Since every pointer use can lead to serious problems when wrongly used, the .NET languages define another concept: the delegates. | + | |
+ | Since every pointer use can lead to serious problems when wrongly used, the .NET languages define another concept: the delegates. And therefore you should also use delegates when you need to dynamically call functions. Please see below in the PCall note for a link to a sample. | ||
==== What is a Delegate ==== | ==== What is a Delegate ==== | ||
A delegate is a declaration of a datatype that defines how a method must be defined, or better, a delegate defines the number and types of parameters and the type of return value. Sometimes this is referred as '' | A delegate is a declaration of a datatype that defines how a method must be defined, or better, a delegate defines the number and types of parameters and the type of return value. Sometimes this is referred as '' | ||
+ | |||
Every datatype in .NET is really a class, and therefore also the delegate declaration is a (special) class (inherited from System.Delegate or System.MulticastDelegate), | Every datatype in .NET is really a class, and therefore also the delegate declaration is a (special) class (inherited from System.Delegate or System.MulticastDelegate), | ||
+ | |||
And it looks like this: | And it looks like this: | ||
< | < | ||
Line 30: | Line 35: | ||
return cParm</ | return cParm</ | ||
In most cases your work with the delegate will be finished here, as you pass the delegate variable to some other method. | In most cases your work with the delegate will be finished here, as you pass the delegate variable to some other method. | ||
+ | |||
But of course you can call the delegate also in your code: | But of course you can call the delegate also in your code: | ||
< | < | ||
Line 35: | Line 41: | ||
Of course you can omit also the Invoke() call - the compiler will add it for you: | Of course you can omit also the Invoke() call - the compiler will add it for you: | ||
< | < | ||
+ | |||
+ | Delegates can be also used in other cases: when you need to call a function in a dynamically loaded DLL. In VO we used the PCall() pseudo-function, | ||
+ | For a sample please look here: [[vo_to_net: | ||
+ | |||
+ | Please look also at this message in the X# forum by Chris Pyrgas: | ||
+ | [[https:// | ||
+ | |||
==== Further informations ==== | ==== Further informations ==== | ||
[[https:// | [[https:// |
delegates.1519066341.txt.gz · Last modified: 2018/02/19 18:52 by wolfgangriedmann