2009-05-23 19 views
6

Jestem deweloperem C# pracy nad projektem VB.NET i VS wciąż próbuje mnie do używania: = thingie kiedy wywołać funkcję z parametrem ByRef tak:Jaki jest pożytek ze składni: =?

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

na HydrateBookFromReader funkcja ma następujący podpis:

Public Function HydrateBookFromReader(ByRef reader As SqlDataReader) As Book 

Dlaczego intellisense zachować podkreślając, że używam tego: = konstrukcji, a co to jest?

Odpowiedz

10

W języku VB parametr: = jest używany do określania nazwanych parametrów.

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

Jest to szczególnie przydatne dla określenia parametrów opcjonalnych.

+0

Dokładnie odpowiedź, której szukałem! Dzięki. Inne odpowiedzi były również bardzo pomocne i informacyjne, ale skupiały się na innych aspektach pytania: –

+0

yw. Trudno o znaki interpunkcyjne Google. Kiedy dodadzą to do C# w następnym wydaniu, będzie to po prostu dwukropek bez znaku równości. Tylko po to, by trzymać nas na palcach, kiedy przełączamy języki. – DOK

+1

Dodam tylko, że jest to szczególnie przydatne, gdy mamy do czynienia z metodą z wieloma opcjonalnymi parametrami. Widać to najwyżej podczas wywoływania interfejsów Office API - istnieją pewne API, które mają 15 opcjonalnych parametrów i wygodniej jest określać parametry po nazwie, niż pominąć wszystkie argumenty pozycyjne. (To dlatego C# dodaje funkcję.) – panopticoncentral

4

Dlaczego firma intellisense nalega, żebym użył tego: = budowa i do czego służy?

Ważne jest, aby pamiętać, że IntelliSense nie nalegać, to proponuje. Używanie go w twoim przypadku nie miałoby sensu ... ta funkcja jest używana przede wszystkim w przypadku bardzo długich list parametrów z wieloma opcjonalnymi parametrami, z których tylko chcesz przekazać, powiedzmy, ostatnie. Jest to przydatne podczas pracy z Microsoft Office Interop.

Również (ponieważ wspomniałeś o tym w swoich tagach): nie ma to nic wspólnego z ByRef. ByRef jest odpowiednikiem ref i out w języku C#, tj. Pozwala na manipulowanie samym parametrem.

+0

Bardzo wnikliwa, kluczową rzeczą tutaj było to, że intellisense jest po to, by sugerować rzeczy, ale nadal zachowujesz kontrolę. –

+0

dobre punkty - Intellisense nalegał, aby go proponować przez cały czas, nie powodując przy tym końca irytacji, szczególnie teraz wiedząc, do czego to służy, i wiedząc, że jest to bezsensowne, gdy stosuje się je do metody pojedynczego parametru. –

+0

Powód, o którym wspomniałem ByRef w tagach jest to, że nie widzę sugestii intellisense, kiedy robię to samo pisząc z parametrem ByVal, więc pomyślałem, że ma to coś wspólnego z ByRefem –

1

Intellisense może sugerować składnię: =, ale podejrzewam, że skompiluje się bez niej.

HydrateBookFromReader(myReader); 

W przyszłych wersjach C#, gdzie są dozwolone parametry opcjonalne nazwane parametry pozwolą na określenie niektórych parametrów a innych nie, i określić parametry w innej kolejności niż zostały one uznane. Parametry nazwane umożliwiają także opcjonalne wyjaśnienie celu przekazywanego parametru, dzięki czemu kod stanie się bardziej czytelny w niektórych przypadkach.

Nazwane parametry będą szczególnie ważne w języku C# 4.0 dla Interop COM, gdzie można wyeliminować wiele zbędnych parametrów.

Anders Hejlsberg ma doskonałą dyskusję na temat przyszłości kanału C# na kanale 9 pod numerem http://channel9.msdn.com/pdc2008/TL16/. Jego dyskusja na temat nazwanych parametrów trwa 40 minut i 45 sekund.

+0

+1 dla dobrego powiązania z C# 4.0, jednak robi to nie odnosi się do pierwotnego pytania. –

Powiązane problemy