En regardant this question, le commentateur @Jon Egerton a mentionné que MyClass
était un mot clé dans VB.Net
. Ayant jamais utilisé, je suis allé et a trouvé le documentation sur elle:Equivalent MyClass en C#
Le mot-clé MyClass se comporte comme une variable objet faisant référence à l'instance actuelle d'une classe comme initialement mis en œuvre. MyClass est similaire à Moi, mais tous les appels de méthode sont traités comme si la méthode était NotOverridable.
Je peux voir comment cela pourrait être utile dans certains cas. Ce que je ne peux pas penser est, comment obtiendriez-vous le même comportement en C# - c'est-à-dire, pour assurer qu'un appel à une méthode virtuelle myMethod
est réellement invoqué contre myMethod
dans la classe actuelle, et non un myMethod
dérivé (aka dans l'IL, invoquant call
au lieu de callvirt
)?
Je pourrais juste avoir un moment mental complètement vide cependant.
Bien sûr, vous pouvez le faire avec la réflexion et 'DynamicMethod' et la coutume IL-génération (en utilisant' 'call' plutôt que callvirt' comme vous le suggérez), mais vous finiriez avec beaucoup de laid code pour quelque chose qui est probablement une mauvaise idée en premier lieu. Si vous avez vraiment besoin de ce comportement pour une raison quelconque, alors la solution de contournement de Heinzi est la voie à suivre. – LukeH