Saya telah belajar sedikit menelusuri Fitur Tersembunyi C # dan terkejut ketika saya tidak dapat menemukan sesuatu yang serupa untuk VB.NET.
Jadi apa sajakah fitur-fiturnya yang tersembunyi atau kurang dikenal?
vb.net
hidden-features
Sean Gough
sumber
sumber
Kustom
Enum
sSalah satu fitur tersembunyi dari VB adalah
completionlist
tag dokumentasi XML yang dapat digunakan untuk membuatEnum
tipe seperti sendiri dengan fungsionalitas yang diperluas. Fitur ini tidak berfungsi di C #.Salah satu contoh dari kode terbaru saya:
Sekarang, saat menetapkan nilai ke variabel yang dideklarasikan sebagai
Rule
, IDE menawarkan daftar IntelliSense dari kemungkinan nilaiRuleTemplates
./ EDIT:
Karena ini adalah fitur yang bergantung pada IDE, sulit untuk menunjukkan bagaimana tampilannya saat Anda menggunakannya, tetapi saya hanya akan menggunakan tangkapan layar:
Daftar penyelesaian beraksi http://page.mi.fu-berlin.de/krudolph/stuff/completionlist.png
Faktanya, IntelliSense 100% identik dengan apa yang Anda dapatkan saat menggunakan file
Enum
.sumber
friend
atau dengan menggunakan kelas yang sama dengan enum:Rule
bukanRuleTemplate
.Pernahkah Anda memperhatikan operator perbandingan Suka?
Dim b As Boolean = "file.txt" Like "*.txt"
Selengkapnya dari MSDN
sumber
Typedefs
VB mengetahui jenis primitif
typedef
viaImport
alias:Ini lebih berguna bila digunakan bersama dengan tipe generik:
sumber
Imports
harus. ;-) Entah bagaimana, kesalahan ini tidak terdeteksi (dan mengumpulkan 28 suara positif) selama hampir setahun penuh.Imports Assert = xUnit.Assert
Oh! dan jangan lupa Literal XML .
sumber
<string>This string contains "quotes" and it's OK.</string>.Value
(saya menemukan terutama berguna ketika menulis tes pada parsing file CSV di mana setiap bidang dalam tanda kutip Akan ini. Tidak menyenangkan telah melarikan diri semua orang kutipan dengan tangan di saya garis uji.)Inisialisasi objek juga ada di sana!
sumber
DirectCast
DirectCast
adalah keajaiban. Di permukaan, ia bekerja mirip denganCType
operator yang mengubah objek dari satu jenis ke jenis lainnya. Namun, ini bekerja dengan seperangkat aturan yang jauh lebih ketat.CType
Oleh karena itu, perilaku sebenarnya seringkali tidak jelas dan sama sekali tidak terbukti jenis konversi apa yang dijalankan.DirectCast
hanya mendukung dua operasi berbeda:Transmisi lain tidak akan berfungsi (misalnya mencoba membuka kotak
Integer
ke aDouble
) dan akan mengakibatkan kesalahan waktu kompilasi / runtime (tergantung pada situasi dan apa yang dapat dideteksi dengan pemeriksaan tipe statis). Oleh karena itu saya menggunakanDirectCast
bila memungkinkan, karena ini menangkap maksud saya dengan baik: tergantung pada situasinya, saya ingin membuka kotak nilai dari tipe yang diketahui atau melakukan upcast. Akhir dari cerita.Menggunakan
CType
, di sisi lain, membuat pembaca kode bertanya-tanya apa yang sebenarnya dimaksudkan oleh pemrogram karena ia menyelesaikan semua jenis operasi yang berbeda, termasuk memanggil kode yang ditentukan pengguna.Mengapa ini fitur tersembunyi? Tim VB telah menerbitkan pedoman 1 yang melarang penggunaan
DirectCast
(meskipun sebenarnya lebih cepat!) Untuk membuat kode lebih seragam. Saya berpendapat bahwa ini adalah pedoman buruk yang harus dibalik: Jika memungkinkan,DirectCast
lebih disukaiCType
operator yang lebih umum . Itu membuat kode lebih jelas.CType
, di sisi lain, hanya harus dipanggil jika ini memang dimaksudkan, yaitu ketikaCType
operator penyempitan (cf. operator overloading ) harus dipanggil.1) Saya tidak dapat menemukan tautan ke pedoman tetapi saya telah menemukan pendapat Paul Vick (kepala pengembang tim VB):
(EDIT oleh Zack: Pelajari lebih lanjut di sini: Bagaimana saya harus melakukan cast di VB.NET? )
sumber
TryCast
saat itu karena saya terutama memiliki tulang untuk dipilih dengan penggunaan yang meluasCType
.TryCast
hanya berfungsi pada tipe referensi, sesuai dokumentasi.If
operator bersyarat dan menyatuItu tidak terlalu tersembunyi seperti sudah usang ! VB 9 memiliki
If
operator yang jauh lebih baik dan bekerja persis seperti operator bersyarat dan penggabungan C # (tergantung pada apa yang Anda inginkan):Diedit untuk menunjukkan contoh lain:
Ini akan bekerja dengan
If()
, tetapi menyebabkan pengecualian denganIIf()
sumber
:?
operator Perl , ini bukan hanya versi yang disederhanakan.Ini bagus. Pernyataan Select Case dalam VB.Net sangat kuat.
Tentu ada standarnya
Tapi masih ada lagi ...
Anda dapat melakukan rentang:
Dan bahkan lebih ...
Anda dapat (meskipun mungkin bukan ide yang baik) melakukan pemeriksaan boolean pada beberapa variabel:
sumber
Select Case True
adalah bahwa hal itu terlihat seolah-olah itu mengevaluasi setiap dariCase
pernyataan dan menjalankan kode untuk masing-masing yang benar. Tetapi pada kenyataannya itu mengevaluasi mereka satu-per-satu dan hanya menjalankan kode untuk yang pertama yang benar. Sintaks untukIf
lebih jelas dalam hal ini (If...Else If...Else If...Else
).Salah satu penghemat waktu utama yang saya gunakan sepanjang waktu adalah kata kunci With :
Saya hanya tidak suka mengetik lebih dari yang seharusnya!
sumber
Pengurai CSV terbaik dan mudah:
Dengan menambahkan referensi ke Microsoft.VisualBasic, ini dapat digunakan dalam bahasa .Net lainnya, misalnya C #
sumber
(EDIT: Pelajari lebih lanjut di sini: Haruskah saya selalu menggunakan operator AndAlso dan OrElse? )
sumber
Anggota statis dalam metode.
Sebagai contoh:
Dalam fungsi di atas, ekspresi reguler pola hanya akan dibuat satu kali tidak peduli berapa kali fungsi tersebut dipanggil.
Penggunaan lain adalah untuk menyimpan contoh "acak" di sekitar:
Juga, ini tidak sama dengan hanya mendeklarasikannya sebagai anggota Bersama kelas; item yang dideklarasikan dengan cara ini dijamin juga aman untuk thread. Tidak masalah dalam skenario ini karena ekspresi tidak akan pernah berubah, tetapi ada orang lain yang mungkin melakukannya.
sumber
Di vb ada perbedaan antara operator ini:
/
adalahDouble
\
yangInteger
mengabaikan sisanyasumber
Saya sangat menyukai Namespace "Saya" yang diperkenalkan pada Visual Basic 2005. Saya adalah jalan pintas ke beberapa grup informasi dan fungsionalitas. Ini memberikan akses cepat dan intuitif ke jenis informasi berikut:
sumber
Acara Kustom
Meskipun jarang berguna, penanganan acara bisa sangat disesuaikan:
Ini kemudian dapat diuji dengan cara berikut:
sumber
Saya baru saja menemukan artikel yang membahas tentang "!" operator, juga dikenal sebagai "operator pencarian kamus". Berikut kutipan dari artikel di: http://panopticoncentral.net/articles/902.aspx
sumber
Ini built-in, dan keuntungan pasti atas C #. Kemampuan untuk mengimplementasikan Metode antarmuka tanpa harus menggunakan nama yang sama.
Seperti:
sumber
Memaksa ByVal
Di VB, jika Anda membungkus argumen Anda dalam satu set tanda kurung tambahan, Anda dapat mengganti deklarasi ByRef dari metode tersebut dan mengubahnya menjadi ByVal. Misalnya, kode berikut menghasilkan 4, 5, 5, bukan 4,5,6
Lihat Argumen Tidak Dimodifikasi oleh Panggilan Prosedur - Variabel yang Mendasari
sumber
Meneruskan parameter dengan nama dan, jadi menyusun ulang mereka
Pemakaian:
Dapat juga dipanggil menggunakan spesifikasi parameter ": =" dalam urutan apa pun:
sumber
Pernyataan Using baru pada VB 8, C # memilikinya sejak awal. Ini panggilan membuang secara otomatis untuk Anda.
Misalnya
sumber
Alias impor juga sebagian besar tidak diketahui:
sumber
Pertimbangkan deklarasi acara berikut
Di C #, Anda dapat memeriksa pelanggan acara dengan menggunakan sintaks berikut:
Namun, kompiler VB.NET tidak mendukung ini. Ini benar-benar membuat bidang anggota pribadi tersembunyi yang tidak terlihat di IntelliSense:
Informasi Lebih Lanjut:
http://jelle.druyts.net/2003/05/09/BehindTheScenesOfEventsInVBNET.aspx http://blogs.msdn.com/vbteam/archive/2009/09/25/testing-events-for-nothing-null-doug -rothaus.aspx
sumber
Jika Anda memerlukan nama variabel yang cocok dengan kata kunci, apit dengan tanda kurung. Tidak nec. praktik terbaik - tetapi dapat digunakan dengan bijak.
misalnya
misalnya Contoh dari komentar (@Pondidum):
sumber
Ada beberapa jawaban tentang Literal XML, tetapi bukan tentang kasus khusus ini:
Anda bisa menggunakan Literal XML untuk menyertakan literal string yang seharusnya di-escape. String literal yang berisi tanda kutip ganda, misalnya.
Daripada ini:
Kamu bisa melakukan ini:
Ini sangat berguna jika Anda menguji literal untuk penguraian CSV:
(Anda tidak harus menggunakan
<string>
tag, tentu saja; Anda dapat menggunakan tag apa pun yang Anda suka.)sumber
<q>
akan menjadi tag yang bagus, mirip dengan penggunaan di Perl / Ruby. Bagaimanapun, itu idiom yang cukup bagus. SUKA!DateTime dapat diinisialisasi dengan mengelilingi tanggal Anda dengan #
Anda juga dapat menggunakan inferensi tipe bersama dengan sintaks ini
Itu jauh lebih bagus daripada menggunakan konstruktor
sumber
Anda dapat memiliki 2 baris kode hanya dalam satu baris. karenanya:
sumber
Call (New Something).CallAMethod()
Parameter Opsional
Opsional jauh lebih mudah daripada membuat overload baru, seperti:
sumber
Kasus Judul di VB.Net dapat dicapai dengan VB6 fxn lama:
sumber
Properti dengan parameter
Saya telah melakukan beberapa pemrograman C #, dan menemukan fitur yang hilang dari VB.Net, tetapi tidak disebutkan di sini.
Contoh bagaimana melakukan ini (serta batasan c #) dapat dilihat di: Menggunakan properti get set tipikal di C # ... dengan parameter
Saya telah mengutip kode dari jawaban itu:
sumber