delegates
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| delegates [2018/02/18 04:47] – 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 | + | 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. |
| 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.1518929248.txt.gz · Last modified: 2018/02/18 04:47 by wolfgangriedmann