Apakah VB.NET memiliki ekuivalen langsung dengan out
parameter fungsi C # , di mana variabel yang dilewatkan ke suatu fungsi tidak perlu diinisialisasi?
Apakah VB.NET memiliki ekuivalen langsung dengan out
parameter fungsi C # , di mana variabel yang dilewatkan ke suatu fungsi tidak perlu diinisialisasi?
Jawaban:
Tidak, tidak ada padanan out
kata kunci di VB.
Namun, VB secara otomatis menginisialisasi semua variabel lokal dalam suatu metode, sehingga Anda dapat menggunakan ByRef
tanpa perlu menginisialisasi variabel secara eksplisit terlebih dahulu.
Contoh:
Sub Main()
Dim y As Integer
Test(y)
End Sub
Sub Test(ByRef x As Integer)
x = 42
End Sub
(Jika Anda memeriksa kode dalam kerangka kerja (misalnya Double.TryParse ), Anda mungkin melihat <OutAttribute>
parameter ditambahkan ke, tetapi itu hanya membuat perbedaan ketika panggilan diatur untuk interop COM atau pemanggilan platform.)
ByRef
parameter. (Ini tidak terjadi dengan parameter tipe nilai.)
Nothing
kepada mereka akan menghilangkan peringatan tersebut meskipun tidak mengubah hasil.
Nothing
mereka sejauh ini. Ini hanya memakan waktu karena saya harus melakukannya ratusan kali di situs web lama yang besar. Terima kasih telah menyelidiki.
Out
atributnya tidak setara dengan out
kata kunci C # .
Tidak, tidak ada konstruk setara yang memungkinkan variabel non-dijalankan untuk diteruskan ke metode tanpa peringatan, tapi, seperti disebutkan dalam saya tanya jawab menentukan sebuah <Out()>
atribut pada ByRef
definisi parameter, meskipun VB mengabaikannya, yang diobati dengan C # sebagai out
parameter.
Jadi, saya akan menginisialisasi variabel referensi ke Nothing
dan menentukan <Out()> ByRef
untuk menandakan niat (yang akan berfungsi jika pengguna C # pernah mengakses metode Anda).
Jika Anda merasa tahu kapan Anda bermaksud mengakses default Nothing
di variabel referensi yang tidak ditetapkan, Anda dapat mengatur "Konfigurasi peringatan" "Penggunaan variabel sebelum penetapan" ke "Tidak ada" di tingkat Proyek (Properti Proyek> Kompilasi, dan Anda mungkin ingin mengatur Konfigurasi ke "Semua Konfigurasi" sebelum mengubah pengaturan ini), atau, di VS2015 (VB.NET 14), Anda dapat menggunakan #Disable Warning BC42030
.
Versi C #
void TestFunc(int x, ref int y, out int z) {
x++;
y++;
z = 5;
}
Versi Vb.net
Sub TestFunc(ByVal x As Integer, ByRef y As Integer, ByRef z As Integer)
x += 1
y += 1
z = 5
End Sub
Memperbarui
Seperti yang dinyatakan di komentar jangan lupa untuk menginisialisasi parameter Anda yang akan digunakan di slot keluar
Saya punya masalah di VB.NET yang saya sebut fungsi "oleh ref" yang melewati array kembali.
Meskipun kompilator menandainya sebagai peringatan, itu baik-baik saja. Cara mengatasinya sangat sederhana dan mungkin praktik pemrograman yang baik.
aku berubah
Dim m_arr_values() as Integer
fnRetArray(m_arr_values)
untuk
' Even though 'Nothing' is the default value, setting it
' stops the compiler complaining.
Dim m_arr_values() as Integer = Nothing
fnRetArray(m_arr_values)
Ini juga membantu saat membuat kode jika nama variabel bersifat deskriptif ...
Sub fnCreatePalette(ByRef arr_in_pal() As color, ByRef arr_out_pal() as uinteger)
...
End Sub
Anda dapat menggunakan metode pass by reference di VB.NET.
Anda memerlukan mekanisme parameter Out di C #, karena ini tidak mengizinkan Anda menggunakan variabel apa pun tanpa memulainya.
VB.NET tidak memerlukan kata kunci khusus karena secara otomatis melakukannya dengan sendirinya.
Cukup gunakan ByRef.
VB memiliki atribut yang seharusnya sama dengan C # out tetapi hari ini Anda masih mendapatkan peringatan meskipun Anda menggunakannya. Ada detail tentang memperbaikinya di area vblang github. https://github.com/dotnet/vblang/issues/67 .
Object
, jadi tidak dapat digunakan untukByRef x As Integer
parameter).