2009-05-23 89 views
6

我是C#开发人员在一个VB.NET工程工作,并不断VS试图让我使用:当我调用一个函数与ByRef参数,像这样=的thingie::=语法的用法是什么?

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

的HydrateBookFromReader函数具有以下签名:

Public Function HydrateBookFromReader(ByRef reader As SqlDataReader) As Book 

为什么智能感知坚持使用:=构造,它是干什么用的?

回答

10

在VB中,:=用于指定命名参数。

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

这对指定可选参数特别有用。

+0

正是我寻找的答案!谢谢。其他答案也非常有帮助和内容丰富,但关注问题 – 2009-05-23 20:29:38

+0

yw的其他方面。有点难以谷歌标点符号。当他们在下一个版本中将它添加到C#中时,它将只是没有等号的冒号。当我们切换语言时,只是为了保持我们的脚趾头。 – DOK 2009-05-23 20:41:25

+1

我只是补充说,这在处理一个有很多可选参数的方法时特别有用。您在调用Office API时看到了这一点 - 有些API有15个可选参数,并且通过名称指定参数比省略所有位置参数更方便。 (这就是为什么C#添加了该功能的原因。) – panopticoncentral 2009-05-26 16:59:25

4

为什么intellisense坚持我坚持使用:=施工,它是什么?

需要注意的是IntelliSense不坚持是很重要的,它提出。在你的情况下使用它是没有意义的......这个特性主要用于很长的参数列表和许多可选参数,其中你只想传递最后一个参数。使用Microsoft Office Interop时非常有用。

另外(因为你在你的标签中提到它):这与ByRef没有任何关系。 ByRef相当于C#中的refout,即它允许该方法操纵参数本身。

1

智能感知可能会提示:=语法,但我怀疑它会在没有它的情况下编译。

HydrateBookFromReader(myReader); 

在可选参数允许的C#未来的版本中,命名的参数将允许你指定一些参数,而不是其他人,而且比他们被宣布以不同的顺序指定参数。命名参数还允许您选择性地阐明传入参数的目的,从而在某些情况下使代码更具可读性。

命名参数在COM Interop的c#4.0中尤为重要,其中可以消除许多多余的参数。

Anders Hejlsberg在第9频道有关C#的未来的极好的讨论http://channel9.msdn.com/pdc2008/TL16/。他对讨论命名参数的讨论时间是40分45秒。