Câu trả lời:
Không, không có out
từ khóa tương đương trong VB.
Tuy nhiên, VB không tự động khởi tạo tất cả các biến cục bộ trong một phương thức, vì vậy bạn có thể sử dụng ByRef
mà không cần phải khởi tạo biến trước một cách rõ ràng.
Thí dụ:
Sub Main()
Dim y As Integer
Test(y)
End Sub
Sub Test(ByRef x As Integer)
x = 42
End Sub
(Nếu bạn kiểm tra mã trong khuôn khổ (ví dụ: Double.TryParse ), bạn có thể thấy các <OutAttribute>
tham số được thêm vào, nhưng điều đó chỉ tạo ra sự khác biệt khi lệnh gọi được điều phối cho COM interop hoặc nền tảng gọi.)
ByRef
tham số. (Nó không xảy ra với các tham số kiểu giá trị.)
Nothing
cho họ cũng sẽ loại bỏ sự kiện cảnh báo mặc dù nó không thay đổi kết quả.
Nothing
cho họ cho đến nay. Nó chỉ tốn thời gian vì tôi phải làm điều đó hàng trăm lần trong một trang web kế thừa lớn. Cảm ơn bạn đã điều tra.
Out
thuộc tính không tương đương với out
từ khóa C # .
Không, không có cấu trúc tương đương nào cho phép một biến không khởi tạo được chuyển đến một phương thức mà không có cảnh báo, nhưng, như đã đề cập trong câu hỏi và câu trả lời của tôi , chỉ định một <Out()>
thuộc tính trên ByRef
định nghĩa tham số, mặc dù VB bỏ qua nó, được xử lý bởi C # như một out
tham số.
Vì vậy, tôi sẽ khởi tạo trước các biến tham chiếu đến Nothing
và chỉ định <Out()> ByRef
để biểu thị ý định (điều đó sẽ hoạt động nếu người dùng C # từng truy cập các phương thức của bạn).
Nếu bạn cảm thấy bạn biết khi nào bạn dự định truy cập mặc định Nothing
trong các biến tham chiếu chưa được gán, bạn có thể đặt "Cấu hình cảnh báo" "Sử dụng biến trước khi gán" thành "Không" ở cấp Dự án (Thuộc tính dự án> Biên dịch, và bạn có thể muốn đặt Cấu hình thành "Tất cả Cấu hình" trước khi thay đổi cài đặt này) hoặc, trong VS2015 (VB.NET 14), bạn có thể sử dụng #Disable Warning BC42030
.
Phiên bản C #
void TestFunc(int x, ref int y, out int z) {
x++;
y++;
z = 5;
}
Phiên bản vb.net
Sub TestFunc(ByVal x As Integer, ByRef y As Integer, ByRef z As Integer)
x += 1
y += 1
z = 5
End Sub
Cập nhật
Như đã nêu trong nhận xét, đừng quên khởi tạo tham số của bạn sẽ được sử dụng trong khe cắm ngoài
Tôi đã gặp sự cố trong VB.NET mà tôi đã gọi một hàm "by ref" đã chuyển lại một mảng.
Mặc dù trình biên dịch đã gắn cờ nó như một cảnh báo, nó vẫn ổn. Cách khắc phục là siêu đơn giản và có thể là thực hành lập trình tốt.
tôi đã thay đổi
Dim m_arr_values() as Integer
fnRetArray(m_arr_values)
đến
' Even though 'Nothing' is the default value, setting it
' stops the compiler complaining.
Dim m_arr_values() as Integer = Nothing
fnRetArray(m_arr_values)
Nó cũng hữu ích khi mã hóa nếu tên biến mang tính mô tả ...
Sub fnCreatePalette(ByRef arr_in_pal() As color, ByRef arr_out_pal() as uinteger)
...
End Sub
Bạn có thể sử dụng phương thức chuyển bằng tham chiếu trong VB.NET.
Bạn cần cơ chế tham số Out trong C #, vì nó không cho phép bạn sử dụng bất kỳ biến nào mà không khởi tạo nó.
VB.NET không cần một từ khóa đặc biệt vì nó tự động làm điều đó.
Chỉ cần sử dụng ByRef.
VB có thuộc tính giống như C # ra nhưng hôm nay bạn vẫn nhận được cảnh báo ngay cả khi bạn sử dụng nó. Có thông tin chi tiết về việc sửa nó trong khu vực vblang của github. https://github.com/dotnet/vblang/issues/67 .
Object
, vì vậy nó không thể được sử dụng cho mộtByRef x As Integer
tham số).