2009-12-15 4 views

Répondre

2

AddressOf est un opérateur VB et n'existe pas en C#. Il crée un délégué à une procédure. Le délégué peut être utilisé plus tard pour appeler la procédure dans le code qui n'inclut pas le nom de la procédure.

Un pointeur en C/C++ est une représentation d'une adresse en mémoire. Vous pouvez créer un pointeur sur une fonction et l'utiliser pour appeler cette fonction. Dans ce cas particulier, les pointeurs et les délégués se comportent de la même manière. Cependant, les délégués ne sont pas simplement des pointeurs de fonction. La différence la plus importante est que les délégués peuvent être enchaînés et appeler plus d'une procédure à la fois.

1

L'exemple de MSDN dit plus de l'histoire:

int number; 
int* p = &number; 
Console.WriteLine("Value pointed to by p: {0}", p->ToString()); 

Cette attribue l'adresse de la variable numéro du pointeur à un int-p.

Il y a quelques captures à ceci: 1. La variable dont vous récupérez l'adresse doit être initialisée. Ce n'est pas un problème pour les types de valeur, par défaut, mais c'est un problème pour les types de référence.

  1. Dans .NET, les variables peuvent être déplacées en mémoire sans que vous en soyez conscient. Si vous avez besoin de traiter l'adresse d'une variable, vous voulez vraiment utiliser fixed pour épingler la variable en RAM.

  2. & ne peut être appliqué qu'à une variable, pas à une constante ni à une valeur. (En d'autres termes, vous ne pouvez pas utiliser une construction comme int * p = & GetSomeInt();)

  3. Encore une fois, votre code doit être compilé en mode non sécurisé, qui drapeaux du CLR que vous allez utiliser des fonctionnalités en dehors de la gestion code "filet de sécurité".

Questions connexes