VB.NET มีคุณสมบัติเทียบเท่ากับout
พารามิเตอร์ฟังก์ชันC # โดยตรงหรือไม่โดยที่ตัวแปรส่งผ่านไปยังฟังก์ชันไม่จำเป็นต้องเริ่มต้น
VB.NET มีคุณสมบัติเทียบเท่ากับout
พารามิเตอร์ฟังก์ชันC # โดยตรงหรือไม่โดยที่ตัวแปรส่งผ่านไปยังฟังก์ชันไม่จำเป็นต้องเริ่มต้น
คำตอบ:
ไม่ไม่มีout
คำหลักที่เทียบเท่าใน VB
อย่างไรก็ตาม VB จะเริ่มต้นตัวแปรโลคัลทั้งหมดโดยอัตโนมัติในวิธีการหนึ่งดังนั้นคุณสามารถใช้ByRef
โดยไม่จำเป็นต้องเริ่มต้นตัวแปรอย่างชัดเจนก่อน
ตัวอย่าง:
Sub Main()
Dim y As Integer
Test(y)
End Sub
Sub Test(ByRef x As Integer)
x = 42
End Sub
(หากคุณตรวจสอบโค้ดในเฟรมเวิร์ก (เช่นDouble.TryParse ) คุณอาจเห็น<OutAttribute>
พารามิเตอร์ที่เพิ่มเข้ามา แต่จะสร้างความแตกต่างได้ก็ต่อเมื่อมีการเรียกใช้การเรียกใช้ COM interop หรือเรียกใช้แพลตฟอร์ม)
ByRef
พารามิเตอร์ (ไม่ได้เกิดขึ้นกับพารามิเตอร์ประเภทค่า)
Nothing
ให้พวกเขาก็จะกำจัดคำเตือนออกไปแม้ว่าผลลัพธ์จะไม่เปลี่ยนแปลงก็ตาม
Nothing
ให้พวกเขาแล้ว มันใช้เวลานานเพราะฉันต้องทำมันหลายร้อยครั้งในเว็บไซต์ดั้งเดิมขนาดใหญ่ ขอบคุณสำหรับการตรวจสอบ
Out
แอตทริบิวต์ไม่เทียบเท่ากับout
คีย์เวิร์ดC #
ไม่ไม่มีโครงสร้างที่เทียบเท่ากันที่อนุญาตให้ส่งผ่านตัวแปรที่ไม่ได้เริ่มต้นไปยังเมธอดโดยไม่มีคำเตือน แต่ดังที่ได้กล่าวไว้ในคำถามและคำตอบของฉันที่ระบุ<Out()>
แอตทริบิวต์ในByRef
นิยามพารามิเตอร์แม้ว่า VB จะละเว้น แต่จะได้รับการปฏิบัติโดย C # เป็นout
พารามิเตอร์
ดังนั้นฉันจะเริ่มต้นตัวแปรอ้างอิงล่วงหน้าNothing
และระบุ<Out()> ByRef
เพื่อแสดงเจตนา (ซึ่งจะใช้ได้ผลถ้าผู้ใช้ C # เคยเข้าถึงวิธีการของคุณ)
หากคุณรู้สึกว่าคุณรู้ว่าเมื่อใดที่คุณต้องการเข้าถึงค่าเริ่มต้นNothing
ในตัวแปรอ้างอิงที่ไม่ได้กำหนดไว้เป็นอย่างอื่นคุณสามารถตั้งค่า "การกำหนดค่าคำเตือน" "การใช้ตัวแปรก่อนกำหนด"เป็น"ไม่มี"ที่ระดับโครงการ (คุณสมบัติโครงการ> คอมไพล์และคุณอาจ ต้องการตั้งค่าการกำหนดค่าที่ "การตั้งค่าทั้งหมด" ก่อนที่จะเปลี่ยนการตั้งค่านี้) หรือใน VS2015 (VB.NET 14) #Disable Warning BC42030
คุณสามารถใช้
รุ่น C #
void TestFunc(int x, ref int y, out int z) {
x++;
y++;
z = 5;
}
เวอร์ชัน Vb.net
Sub TestFunc(ByVal x As Integer, ByRef y As Integer, ByRef z As Integer)
x += 1
y += 1
z = 5
End Sub
อัปเดต
ตามที่ระบุไว้ในความคิดเห็นอย่าลืมเริ่มต้นพารามิเตอร์ของคุณที่จะใช้ในช่องเอาต์
ฉันมีปัญหาใน VB.NET ที่ฉันเรียกว่าฟังก์ชัน "by ref" ที่ส่งอาร์เรย์กลับ
แม้ว่าคอมไพลเลอร์จะตั้งค่าสถานะว่าเป็นคำเตือน แต่ก็ใช้ได้ การแก้ไขนั้นง่ายมากและอาจเป็นการฝึกเขียนโปรแกรมที่ดี
ฉันเปลี่ยนไป
Dim m_arr_values() as Integer
fnRetArray(m_arr_values)
ถึง
' Even though 'Nothing' is the default value, setting it
' stops the compiler complaining.
Dim m_arr_values() as Integer = Nothing
fnRetArray(m_arr_values)
นอกจากนี้ยังช่วยในการเข้ารหัสหากชื่อตัวแปรเป็นคำอธิบาย ...
Sub fnCreatePalette(ByRef arr_in_pal() As color, ByRef arr_out_pal() as uinteger)
...
End Sub
คุณสามารถใช้ pass by reference method ใน VB.NET
คุณต้องมีกลไกพารามิเตอร์ Out ใน C # เนื่องจากไม่อนุญาตให้คุณใช้ตัวแปรใด ๆ โดยไม่ต้องเริ่มต้น
VB.NET ไม่จำเป็นต้องมีคีย์เวิร์ดพิเศษเพราะมันทำด้วยตัวเองโดยอัตโนมัติ
เพียงใช้ ByRef
Object
ดังนั้นจึงไม่สามารถใช้เป็นByRef x As Integer
พารามิเตอร์ได้)