2009-05-23 13 views
6

Ich bin ein C# Entwickler an einem Projekt VB.NET arbeiten, und VS hält zu versuchen, mich dazu zu bringen, die zu verwenden: = thingie wenn ich wie so eine Funktion mit einem ByRef Parameter aufrufen:Was nutzt die Syntax: =?

While reader.Read() 
HydrateBookFromReader(reader:=???) 

der HydrateBookFromReader Funktion hat die folgende Signatur:

Public Function HydrateBookFromReader(ByRef reader As SqlDataReader) As Book 

Warum halten intellisense bestand darauf, dass ich, dass: = Bau, und was ist es?

Antwort

10

In VB wird das: = verwendet, um benannte Parameter anzugeben.

Contact(Address:="2020 Palm Ave", Name:="Peter Evans") 

Dies ist besonders nützlich für die Angabe optionaler Parameter.

+0

Genau die Antwort, die ich suchte! Vielen Dank. Die anderen Antworten waren auch sehr hilfreich und informativ, aber konzentrieren Sie sich auf andere Aspekte der Frage –

+0

yw. Ein bisschen schwer zu Interpunktionszeichen. Wenn sie dies in der nächsten Version zu C# hinzufügen, ist es nur der Doppelpunkt ohne das Gleichheitszeichen. Nur um uns auf Trab zu halten, wenn wir die Sprache wechseln. – DOK

+1

Ich würde nur hinzufügen, dass dies besonders nützlich ist, wenn es um eine Methode mit vielen optionalen Parametern geht. Das sehen Sie am häufigsten beim Aufruf von Office-APIs - es gibt einige APIs mit 15 optionalen Parametern, und es ist viel praktischer, die Parameter nach Namen anzugeben, anstatt alle Positionsargumente wegzulassen. (Deshalb fügt C# die Funktion hinzu.) – panopticoncentral

4

Warum besteht intellisense darauf, dass ich das verwende: = Konstruktion, und wozu dient es?

Es ist wichtig zu beachten, dass IntelliSense nicht darauf bestehen, es schlägt. Die Verwendung in Ihrem Fall wäre nicht sinnvoll ... Diese Funktion wird hauptsächlich für sehr lange Parameterlisten mit vielen optionalen Parametern verwendet, von denen Sie nur die letzte übergeben möchten. Es ist nützlich, wenn Sie mit Microsoft Office Interop arbeiten.

Auch (da Sie es in Ihren Tags erwähnen): das hat nichts mit ByRef zu tun. ByRef entspricht ref und out in C#, d. H. Es erlaubt der Methode, den Parameter selbst zu manipulieren.

+0

Sehr aufschlussreich, das Wichtigste hier war, dass IntelliSense dazu da ist, Dinge vorzuschlagen, aber Sie behalten immer noch die Kontrolle. –

+0

gute Punkte - Intellisense bestand darauf, es ständig vorzuschlagen, was für mich kein Ende des Ärgers bedeutete, besonders jetzt, wo ich weiß, wofür es ist, und zu wissen, dass es unsinnig ist, wenn es auf eine Einzelparameter-Methode angewendet wird –

+0

Der Grund, warum ich ByRef erwähnte in den Tags ist, dass ich den Intellisense-Vorschlag nicht sehe, wenn ich die gleiche Eingabe gegen einen ByVal-Parameter mache, also dachte ich, dass es etwas mit ByRef –

1

Intellisense kann vorschlagen, die: = Syntax, aber ich vermute, dass es ohne es kompilieren wird.

HydrateBookFromReader(myReader); 

In zukünftigen Versionen von C#, wobei optionale Parameter zulässig sind, benannte Parameter ermöglicht es Ihnen, einige Parameter angeben, andere aber nicht, und die Parameter in einer anderen Reihenfolge angeben, als sie deklariert wurden. Mit benannten Parametern können Sie optional auch den Zweck des übergebenen Parameters verdeutlichen und den Code in einigen Fällen besser lesbar machen.

Benannte Parameter sind besonders wichtig in C# 4.0 für COM Interop, wo viele überflüssige Parameter eliminiert werden können.

Anders Hejlsberg hat eine ausgezeichnete Diskussion über die Zukunft von C# auf Kanal 9 unter http://channel9.msdn.com/pdc2008/TL16/. Seine Diskussion über benannte Parameter dauert 40 Minuten und 45 Sekunden.

+0

+1 für die gute Verbindung mit C# 4.0 zu tun hat, aber es tut nicht Behandle die ursprüngliche Frage nicht vollständig. –