Laden...

Wozu rechteckige Klammer [ ], wenn es doch kein Array ist?

Erstellt von BlackSimon vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.249 Views
BlackSimon Themenstarter:in
42 Beiträge seit 2018
vor 5 Jahren
Wozu rechteckige Klammer [ ], wenn es doch kein Array ist?

Hallo Leute,

ich habe folgendes im Quellcode gelesen und konnte damit nichts weiter anfangen:


[EventSubscription(EventTopicNames.MapSelectionChanged, ThreadOption.UserInterface)]
public void OnMapSelectionChanged(object sender, abc.Legis.Infrastructure.Interface.EventArgs<List<gisbe.DrawCustomer>> e)

Es geht mir nur um den Teil in den rechteckigen Klammern.
Ich kenne rechteckige Klammern eigentlich nur von Arrays, gibt es noch andere Verwendungsmöglichkeiten, bzw. was bewirkt der Part?

1.029 Beiträge seit 2010
vor 5 Jahren
"de

Hi,

naja - die genauere Bezeichnung für das dir bekannte Einsatzgebiet der eckigen Klammern nennt sich "Indexer" - und kann z.B. auch bei vielen Art von Listen verwendet werden.

Im hier vorliegenden Fall wurde die Methode mit einem sogenannten Attribut markiert. (Die Syntax dafür beinhaltet eben jene eckigen Klammern)

Ich kann dir nicht genau sagen was das Attribut hier exakt bewirkt oder wie es implementiert ist, da es (soweit mir bekannt) kein Standard-Attribut ist, allerdings kann man problemlos eigene Attribute entwickeln und damit Klassen, Methoden, etc. dekorieren kann. Prinzipiell können diese Attribute dann auch an anderer Stelle wieder ausgelesen und entsprechend verwendet werden - im vorliegenden Fall bewirkt das wohl letztendlich, dass diese Methode automatisch (im UI-Thread) aufgerufen wird, sofern das Ereignis "MapSelectionChanged" ausgelöst wird.

LG

BlackSimon Themenstarter:in
42 Beiträge seit 2018
vor 5 Jahren

Achso, man damit also ein wenig das Verhalten von z.B. Methoden steuern.

Kenne ich so von Java her gar nicht.

656 Beiträge seit 2008
vor 5 Jahren

In Java sind das Annotations.

Also zb.

@Deprecated
void YouShouldNotUseThis() { }

Wäre in C# ein

[Obsolete("This method should not be used")]
void YouShouldNotUseThis() { }

(Name ist anders, Obsolete vs. Deprecated; aber die Funktion ist sehr ähnlich)

BlackSimon Themenstarter:in
42 Beiträge seit 2018
vor 5 Jahren

Thankx
Ihr habt mir sehr gehelped. 🙂