2009-05-23 46 views
6

Tôi là một nhà phát triển C# làm việc trên một dự án VB.NET, và VS tiếp tục cố gắng để làm cho tôi sử dụng: = thingie khi tôi gọi một hàm với một tham số ByRef như vậy:Việc sử dụng cú pháp: = cú pháp là gì?

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

các HydrateBookFromReader chức năng có chữ ký sau:

Public Function HydrateBookFromReader(ByRef reader As SqlDataReader) As Book 

Tại sao intellisense tiếp tục nhấn mạnh rằng tôi sử dụng: = xây dựng, và nó là gì?

Trả lời

10

Trong VB, dấu: = được sử dụng để chỉ định các tham số đã đặt tên.

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

Điều này đặc biệt hữu ích khi chỉ định tham số tùy chọn.

+0

Chính xác câu trả lời tôi đang tìm kiếm! Cảm ơn. Các câu trả lời khác cũng rất hữu ích và mang tính thông tin, nhưng tập trung vào các khía cạnh khác của câu hỏi –

+0

yw. Khó đánh dấu dấu câu của Google. Khi họ thêm điều này vào C# trong bản phát hành tiếp theo, nó sẽ chỉ là dấu hai chấm không có dấu bằng. Chỉ để giữ cho chúng tôi trên ngón chân của chúng tôi khi chúng tôi chuyển đổi ngôn ngữ. – DOK

+1

Tôi chỉ muốn thêm rằng điều này đặc biệt hữu ích khi xử lý một phương thức có nhiều tham số tùy chọn. Bạn thấy điều này nhiều nhất khi gọi API Office - có một số API có 15 tham số tùy chọn và thuận tiện hơn nhiều khi chỉ định tham số theo tên thay vì bỏ qua tất cả các đối số vị trí. (Đây là lý do tại sao C# đang thêm tính năng.) – panopticoncentral

4

Tại sao intellisense tiếp tục nhấn mạnh rằng tôi sử dụng: = xây dựng và nó là gì?

Điều quan trọng cần lưu ý là IntelliSense không nhấn mạnh, nó đề xuất. Sử dụng nó trong trường hợp của bạn sẽ không có ý nghĩa ... tính năng này chủ yếu được sử dụng cho các danh sách tham số rất dài với nhiều thông số tùy chọn, trong đó bạn chỉ muốn vượt qua, nói rằng, cuối cùng. Nó rất hữu ích khi làm việc với Microsoft Office Interop.

Ngoài ra (kể từ khi bạn đề cập đến nó trong thẻ của bạn): điều này không có gì để làm với ByRef. ByRef tương đương với refout trong C#, nghĩa là nó cho phép phương pháp tự điều chỉnh thông số.

+0

Rất sâu sắc, điều quan trọng ở đây là intellisense là có để đề xuất những điều nhưng bạn vẫn giữ quyền kiểm soát. –

+0

điểm tốt - Intellisense đã nhấn mạnh vào việc đề xuất nó mọi lúc, không gây ra kết thúc phiền toái cho tôi, đặc biệt là bây giờ biết nó là gì, và biết rằng nó là vô nghĩa khi áp dụng cho một phương pháp tham số đơn –

+0

Lý do tôi đã đề cập ByRef trong các thẻ là tôi không nhìn thấy gợi ý intellisense khi tôi làm cùng một kiểu gõ với tham số ByVal, vì vậy tôi nghĩ rằng nó có liên quan đến ByRef –

1

Intellisense có thể gợi ý cú pháp: =, nhưng tôi nghi ngờ rằng nó sẽ biên dịch mà không có nó.

HydrateBookFromReader(myReader); 

Trong các phiên bản tương lai của C# nơi thông số tùy chọn được cho phép, tên tham số này sẽ cho phép bạn chỉ định một số thông số nhưng không phải người khác, và để xác định các thông số theo một thứ tự khác nhau hơn những gì họ đã được tuyên bố. Các tham số được đặt tên cũng sẽ cho phép bạn làm rõ tùy chọn mục đích của tham số được truyền vào, làm cho mã dễ đọc hơn trong một số trường hợp.

Các thông số được đặt tên sẽ đặc biệt quan trọng trong C# 4.0 cho COM Interop, nơi có thể loại bỏ nhiều thông số thừa.

Anders Hejlsberg có một cuộc thảo luận tuyệt vời về tương lai của C# trên Kênh 9 tại http://channel9.msdn.com/pdc2008/TL16/. Thảo luận của ông về các thông số được đặt tên là 40 phút và 45 giây vào cuộc nói chuyện.

+0

+1 cho sự liên kết tốt với C# 4.0, tuy nhiên nó không không hoàn toàn giải quyết câu hỏi gốc. –

Các vấn đề liên quan