2011-07-19 17 views
9

VB.NET không có thông số out, nhưng bạn có thể chỉ định <Out()> ByRef trên các phương thức COM và P/Invoke để có cùng hiệu ứng cho các phương thức bên ngoài.Không xác định OutAttribute trên phương pháp nội bộ ByRef hiện đang làm gì?

Không chỉ định giống nhau về phương pháp nội bộ (tức là các phương thức chỉ được gọi bằng mã .NET) thực sự giúp Jitter (hoặc trình biên dịch VB.NET)? Hoặc là nó hiện chỉ hữu ích như là một lưu ý lập trình viên.

Có khả năng nó có thể được sử dụng trong Jitter trong tương lai hay thuộc tính này bị mất khi biên dịch?

Trả lời

9

Tôi đã xác nhận rằng VB.NET <Out()> không gây ra ứng dụng khách C# để yêu cầu các đối số out, do đó, dường như nó có hiệu quả giống nhau.

Ngoài ra máy khách C# chuyển đối số với giá trị hiện tại vào phương thức, nhưng điều đó không đáng ngạc nhiên vì, không giống như trường hợp COM hoặc P/Invoke, không có sự sắp xếp nào. (Và C# sẽ không cho phép một thuộc tính được đặt trực tiếp bởi một đối số out, vì vậy dường như không có cách nào để xem liệu C# có tối ưu hóa một nhiệm vụ không cần thiết trước đây không.)

Vì vậy, có vẻ như câu trả lời là nó có thể giúp các khách hàng C# trong tương lai có thể sử dụng mã không, và nếu jitter có bao giờ điều chỉnh tương đương với C#, nó sẽ làm tương tự ở đây. Mặc dù bởi vì các ngôn ngữ như VB tồn tại, nó không thể làm được gì nhiều bởi vì chúng không tôn trọng bản thân số Out attribute.

+1

Có, đó là * chính xác * giống nhau. Từ khóa C# 'out' biên dịch xuống mã IL chứa thuộc tính' '. VB.NET không có từ khóa. Bạn có thể xác minh điều này cho chính mình bằng cách biên dịch hai dự án thử nghiệm và sử dụng ILdasm để so sánh chúng. –

+0

Tôi giả định điều này đề cập đến thuộc tính Out trong không gian tên System.Runtime.InteropServices. Đó là trường hợp? – jswolf19

+0

@ jswolf19 Có, đã sửa đổi, cũng trong câu trả lời của tôi trong các câu hỏi được liên kết. –

1

Tôi được phân loại là MembershipProvider với lớp VB, chúng tôi sẽ gọi nó là A và sau đó là lớp con A với lớp C# mà chúng tôi sẽ gọi B. Mã C#, B, không nhận ra thực tế là các phương thức trừu tượng trong MembershipProvider đã được triển khai trong lớp con VB, A, cho đến khi tôi áp dụng OutAttribute trong lớp VB cho các tham số được chỉ định là out trong phương thức trừu tượng lớp cơ sở MembershipProvider. Điều này có tác động vượt quá chỉ COM hoặc P/Invoke.

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