DefaultMemberAttribute - was macht es?

8

Ich habe den MSDN-Artikel bereits gelesen. Es scheint intern, es ist die Art, wie c # setzt, welche Funktion als Indexer funktionieren wird (habe ich recht?). Nun habe ich das folgende Beispiel gesehen:

%Vor%

Jetzt verstehe ich nicht, was es bedeutet.

Danke allen. Aber ich kann immer noch nicht seine Nützlichkeit bekommen, abgesehen von der Indexer Sache. Wann werden wir InvokeMember aufrufen?

    
devoured elysium 13.07.2009, 14:35
quelle

3 Antworten

5

Ich persönlich habe es nie benutzt, aber soweit ich das sagen kann, definieren Sie die Standardmethode, die beim Aufruf von InvokeMember . Also, benutze das Code-Snippet, das du zur Verfügung gestellt hast, wenn ich sagen sollte:

%Vor%

Da ich das erste Argument des Aufrufs von InvokeMember leer gelassen habe, würde es das Attribut verwenden, um zu bestimmen, was das Standardelement Ihrer Klasse ist, in Ihrem Fall ist es Main.

    
joshlrogers 13.07.2009, 14:52
quelle
9

Nein, die DefaultMemberAttribute wird von Sprachen wie VB verwendet .NET, um das Element zu ermitteln, auf das standardmäßig reagiert wird, wenn kein Element von einem Objekt referenziert wird, dh das Element, das von InvokeMember . Dies wird oft in Verbindung mit Indexern verwendet, wie Sie bereits angemerkt haben, aber es wird nicht direkt von C # verwendet (es sei denn, Sie verwenden InvokeMember explizit).

Zum Nutzen anderer .NET-Sprachen gibt C # jedoch % co_de aus % für den Indexer einer Klasse (falls vorhanden), wie in MSDN :

  

Der C # -Compiler gibt die   DefaultMemberAttribute für einen beliebigen Typ   enthält einen Indexer. In C # ist es ein   Fehler, um einen Typ manuell zuzuweisen   mit dem DefaultMemberAttribute wenn der   type deklariert auch einen Indexer.

Ich denke, MSDN verwirrt die Dinge, indem er in den Bemerkungen viel auf Indexer verweist, aber dann ein Beispiel gibt, das keinen Indexer verwendet. Zur Verdeutlichung kann das Standardmember alles sein, aber C # gibt ein besonderes Verhalten für Indexer, indem es das Attribut für Sie (wenn ein Indexer existiert) für die Ausnahme aller anderen Anwendungsfälle ausgibt.

    
Jeff Yates 13.07.2009 14:54
quelle
1

Das Attribut DefaultMemberAttribute definiert das Standardelement, das für ein as aufgerufen werden soll InvokeMember wird mit einer leeren Zeichenfolge als erstes Argument aufgerufen.

Wenn Sie die MSDN-Dokumentation für InvokeMember lesen, heißt es ausdrücklich:

  

Parameter
  Name
  Typ: System.String
  Der String, der den Namen des Konstruktors, der Methode, der Eigenschaft oder des Feldelements enthält, das aufgerufen werden soll.
  -oder-
  Eine leere Zeichenfolge (""), um das Standardelement aufzurufen.

Das Standardelement wird vom DefaultMemberAttribute-Attribut deklariert.

    
adrianbanks 13.07.2009 14:53
quelle

Tags und Links