Какая польза от синтаксиса:=?
Я разработчик C#, работающий над проектом VB.NET, и VS продолжает пытаться заставить меня использовать:= thingie, когда я вызываю функцию с параметром ByRef, например:
While reader.Read()
HydrateBookFromReader(reader:=???)
функция HydrateBookFromReader имеет следующую подпись:
Public Function HydrateBookFromReader(ByRef reader As SqlDataReader) As Book
Почему intellisense продолжает настаивать на том, чтобы я использовал это: = конструкция, и для чего он нужен?
3 ответа
В VB:= используется для указания именованных параметров.
Contact(Address:="2020 Palm Ave", Name:="Peter Evans")
Это особенно полезно для указания дополнительных параметров.
Почему intellisense продолжает настаивать на том, чтобы я использовал это:= конструкция, и для чего он нужен?
Важно отметить, что IntelliSense не настаивает, а предлагает. Использование его в вашем случае не имеет смысла... эта функция в основном используется для очень длинных списков параметров со многими необязательными параметрами, из которых вы хотите передать, скажем, последний. Это полезно при работе с Microsoft Office Interop.
Также (так как вы упоминаете это в своих тегах): это не имеет ничего общего с ByRef
, ByRef
эквивалентно ref
а также out
в C#, т.е. позволяет методу манипулировать самим параметром.
Intellisense может предлагать синтаксис:=, но я подозреваю, что он будет компилироваться без него.
HydrateBookFromReader(myReader);
В будущих версиях C#, где разрешены необязательные параметры, именованные параметры позволят вам указать некоторые параметры, но не другие, и указать параметры в другом порядке, чем они были объявлены. Именованные параметры также позволят вам дополнительно уточнить назначение передаваемого параметра, что делает код более читабельным в некоторых случаях.
Именованные параметры будут особенно важны в C# 4.0 для COM Interop, где многие лишние параметры могут быть устранены.
Андерс Хейлсберг отлично обсуждает будущее C# на 9 канале по адресу http://channel9.msdn.com/pdc2008/TL16/. Его обсуждение названных параметров начинается через 40 минут и 45 секунд.