DefaultMemberAtsortingbute – que fait-il?

J’ai déjà lu l’article de MSDN à ce sujet. Il semble en interne que c # définit la fonction qui va fonctionner comme indexeur (c’est vrai?) Maintenant, j’ai vu l’exemple suivant:

[DefaultMemberAtsortingbute("Main")] public class Program { public static void Main() { ... } } 

Maintenant, je ne comprends pas ce que cela signifie.


Merci a tous. Mais je ne parviens toujours pas à comprendre son utilité, mis à part l’indexeur. Quand allons-nous appeler InvokeMember?

Personnellement, je ne l’ai jamais utilisé, mais pour autant que je sache, vous définissez la méthode par défaut à appeler lors de l’appel de InvokeMember . Donc, en utilisant l’extrait de code que vous avez fourni si je devais dire:

 Program prog = new Program(); typeof(Program).InvokeMember("", null, null, prog, null); 

Comme j’ai laissé le premier argument vide de l’appel InvokeMember, il utiliserait l’atsortingbut pour déterminer le membre par défaut de votre classe. Dans votre cas, il s’agit de Main.

Non, DefaultMemberAtsortingbute est utilisé par des langages tels que VB.NET pour connaître le membre sur lequel on agit par défaut si aucun membre n’est référencé à partir d’un object, c’est-à-dire le membre InvokeMember par InvokeMember . Ceci est souvent utilisé avec les indexeurs, comme vous l’avez indiqué, mais il n’est pas utilisé directement par C # (à moins que vous InvokeMember explicitement).

Toutefois, dans l’intérêt des autres langages .NET, C # émet le DefaultMemberAtsortingbute pour l’indexeur d’une classe (le cas échéant), comme indiqué par MSDN :

Le compilateur C # émet le DefaultMemberAtsortingbute sur tout type contenant un indexeur. En C #, l’atsortingbution manuelle d’un type à l’aide de DefaultMemberAtsortingbute est une erreur si le type déclare également un indexeur.

Je pense que MSDN confond les choses en faisant souvent référence aux indexeurs dans les remarques, mais en donnant ensuite un exemple qui n’utilise pas d’indexeur. Pour clarifier, le membre par défaut peut être n’importe quoi, mais C # donne un comportement spécial aux indexeurs en émettant l’atsortingbut pour vous (s’il existe un indexeur) à l’exception de tous les autres cas d’utilisation.

L’atsortingbut DefaultMemberAtsortingbute définit le membre par défaut à appeler lorsque InvokeMember est appelé avec une chaîne vide comme premier argument.

Si vous lisez la documentation MSDN pour InvokeMember , elle indique explicitement:

Paramètres
prénom
Type: System.Ssortingng
La chaîne contenant le nom du constructeur, de la méthode, de la propriété ou du membre de champ à appeler.
-ou-
Une chaîne vide (“”) pour appeler le membre par défaut.

Le membre par défaut sera celui déclaré par l’atsortingbut DefaultMemberAtsortingbute.