Ringkasan: Ikhtisar tentang bagaimana fungsi Saya memaparkan fungsionalitas .NET Framework, termasuk kelas yang tersedia, kelas yang dihasilkan secara dinamis, dan threading.
Catatan: Artikel dan contoh kode ini didasarkan pada versi pra-rilis Microsoft Visual Studio 2005 (sebelumnya diberi nama kode "Whidbey"). Semua informasi yang terkandung di sini dapat berubah. Proyek sampel memerlukan Visual Studio2005Beta1 atau lebih tinggi.
Perkenalan
My adalah fitur baru dalam Visual Basic 2005 yang menempatkan fungsionalitas yang sering digunakan di ujung jari Anda dan mengurangi jumlah baris kode yang harus Anda tulis. Hal ini dilakukan dengan cara yang efisien, andal, dan aman untuk thread. Dalam lingkungan di mana produktivitas programmer sangat penting, My dapat membantu Anda menyelesaikan pekerjaan Anda lebih cepat. Ini adalah inti dari Visual Basic.
Tujuan artikel ini adalah untuk mengeksplorasi cara menggunakan Saya untuk mengakses fungsionalitas dan item .NET Framework dalam proyek Anda.
Kelas .NETFramework tersedia dari My
Karena ada begitu banyak hal yang terlibat dalam .NET Framework, mungkin sulit untuk menemukan fungsionalitas yang Anda perlukan. Untuk mengatasi masalah ini, My menyediakan titik masuk ke kelas dan fungsi .NET Framework yang umum digunakan. Saya juga memaparkan kelas .NET Framework tingkat tinggi baru yang menggabungkan fungsionalitas terkait ke dalam API berbasis tugas.
Saya mengekspos fungsionalitas dengan mengembalikan kelas .NETFramework yang dipakai dan siap digunakan, menunda panggilan ke metode .NETFramework, dan mengembalikan kelas yang dihasilkan secara dinamis yang dapat digunakan untuk mengakses item dalam proyek Anda.
Langsung ke publik
Jika memungkinkan, My berfungsi sebagai mekanisme penemuan untuk kelas-kelas yang ada di .NET Framework dan mengekspos tipe-tipe ini secara langsung. Lihat contoh My.application.Deployment berikut:
PublicReadOnlyPRpertyDeployment()As_
Sistem.Deployment.ApplicationDeployment
Mendapatkan
Kembali_
Sistem.Deployment.ApplicationDeployment.CurrentDeployment
Dapatkan Akhir
Properti Akhir
Contoh lain dari paparan langsung mencakup My.Computer.FileSystem.OpenTextFileReader() (yang mengembalikan System.IO.StreamReader), My.Application.OpenForms() (yang mengembalikan System.Windows.Forms.FormsCollection), My.User (yang mengembalikan Sistem.Keamanan.Kepala Sekolah.IPrincipal), dll.
Penampilan
Saya juga dapat mengembalikan kelas baru yang menyediakan API berbasis tugas untuk melakukan operasi yang sebelumnya sulit dilakukan karena sulit menemukan fungsionalitas dan/atau memerlukan banyak objek untuk bekerja bersama.
Tugas umum yang memerlukan penggunaan .NET Framework API tingkat rendah atau memerlukan beberapa baris kode menjadi sangat disederhanakan. Lihat contoh tugas berikut untuk menentukan apakah koneksi jaringan tersedia:
ImporSystem.Net.NetworkInformation
PublicReadOnlyPropertyIsAvailable()AsBoolean
Mendapatkan
UntukEachNetInterfaceAsNetworkInterfaceIn_
NetworkInterface.GetAllNetworkInterfaces()
IfNetInterface.Type<>InterfaceType.Loopback_
DanJugaNetInterface.Type<>InterfaceType.Tunnel_
DanJugaNetInterface.OperationalStatus=_
Status Operasional.UpThen
Kembali Benar
AkhirJika
Berikutnya
Kembali Salah
Dapatkan Akhir
Properti Akhir
Kode di atas memerlukan pengetahuan rinci tentang beberapa jenis namespace System.Net.NetworkInformation. Dengan menggunakan pola tampilan, My.Computer.Network mengurangi tipe ini dan hubungannya menjadi satu baris kode: My.Computer.Network.IsAvailable().
Penampilan juga dapat menyatukan fungsionalitas terkait yang mungkin sulit ditemukan. Misalnya, My.Computer menyatukan properti dari kelas yang berbeda untuk memberikan nama komputer dan akses ke layar:
PublicReadOnlyPropertyName()AsString
Mendapatkan
ReturnSystem.Lingkungan.Nama Mesin
Dapatkan Akhir
Properti Akhir
PublicReadOnlyPropertyScreen()AsSystem.Windows.Forms.Screen
Mendapatkan
ReturnSystem.Windows.Forms.Screen.PrimaryScreen
Dapatkan Akhir
Properti Akhir
Contoh kelas lain di My yang menyatukan fungsionalitas terkait dari beberapa tipe .NET Framework termasuk My.Application, My.Computer, My.Computer.FileSystem, My.Computer.Info, dan My.Application.Info.
Kelas proksi
Kelas proxy adalah kelas yang sangat "tipis" yang meneruskan semua panggilan ke objek dasar. Misalnya, jika Anda memanggil My.Computer.Clipboard.GetText(), Anda sebenarnya memanggil metode kelas proxy ClipboardProxy.GetText(), yang didefinisikan sebagai berikut:
PublicFunctionGetText()AsString
KembalikanClipboard.GetText()
Fungsi Akhir
Berdasarkan konvensi, kelas proxy selalu memiliki akhiran Proxy. Saya menggunakan proxy saat mengakses clipboard, sistem file, dan registri karena kelas dasar yang diekspos oleh proxy terdiri dari metode bersama yang tidak terlihat di IntelliSense. Kelas Proxy tidak dapat dipakai oleh pengguna. Pengujian kinerja menunjukkan bahwa meneruskan panggilan melalui proxy tidak masuk akal.
Kelas yang dihasilkan secara dinamis
Sejalan dengan tujuan "menempatkan fungsionalitas di ujung jari Anda," My menyediakan akses ke formulir, layanan Web, sumber daya, dan pengaturan yang ditentukan dalam proyek Anda. Misalnya, jika proyek Anda berisi referensi ke layanan web MapDirections, Anda dapat langsung menggunakan layanan web tersebut tanpa harus mengetahui cara memulai instance proksi layanan web. Anda cukup mengetik berikut ini: My.WebServices.MapDirections.GetDirections(...)
Bagaimana cara kerjanya? Kelas pabrik dihasilkan oleh kompiler yang mengembalikan instance yang dibuat dengan lambat sesuai permintaan untuk formulir, layanan web, pengaturan, dan sumber daya dalam proyek Anda. Kelas pabrik diadaptasi untuk mengembalikan instance dengan cara yang sesuai dengan jenis proyek (exe/dll/web) di mana kode Anda berjalan. Lihat bagian "Threading" untuk lebih jelasnya.
Saya.Formulir
Sebagai contoh kelas yang dihasilkan secara dinamis, pertimbangkan My.Forms. Kelas ini disediakan untuk Anda dan mendefinisikan metode pabrik untuk setiap formulir dalam proyek Anda. Saat Anda mengakses Formulir melalui My.Forms.Form1, metode pabrik memeriksa apakah instance Form1 sudah terbuka. Jika sebuah instance sudah terbuka, instance tersebut akan dikembalikan. Jika tidak, sebuah instance dari Form1 dibuat dan dikembalikan. Kode yang dihasilkan untuk proyek yang berisi Form1 terlihat seperti ini:
KelasBentukku
'Kode yang dicetak tebal dihasilkan oleh kompiler
Publikm_Form1AsForm1
PublicPropertyForm1()AsForm1
Mendapatkan
m_Form1=Buat__Instance__(OfForm1)(m_Form1)
Kembalikan_Formulir1
Dapatkan Akhir
Set(BerdasarkanValValueAsForm1)
IfValueIsm_Form1
Kembali
AkhirJika
IfNotValueIsNothingThen
ThrowNewArgumentException(_
Properti hanya bisa menjadi Tidak Ada.)
AkhirJika
Buang__Instance__(OfForm1)(m_Form1)
Set Akhir
Properti Akhir
Kelas Akhir
Fungsi Create__Instance__() bertanggung jawab untuk membuat instance formulir sesuai permintaan. Ia memeriksa apakah formulir (disimpan di m_Form1) telah dipakai. Jika formulir sudah dipakai, formulir dikembalikan. Jika tidak, sebuah instance akan dibuat dan dikembalikan. Create__Instance__() juga menangkap upaya pembuatan formulir rekursif. Dispose__Instance__() bertanggung jawab untuk menutup formulir.
My.Forms juga menyediakan metode untuk memperkenalkan kembali contoh default formulir, yang mungkin Anda kenal dari versi Visual Basic yang lebih lama. Contoh default memungkinkan untuk mereferensikan contoh formulir tanpa terlebih dahulu secara eksplisit membuat contoh formulir.
Misalnya, dalam Visual Basic 6.0, Anda mungkin menulis Form1.Show() sebagai gantinya:
DimForm1InstanceasForm1
Form1Instance=Form1 baru
Formulir1Instance.Tampilkan()
Karena kompiler di Visual Basic 2005 menggunakan My.Forms untuk membuat instance default, Anda cukup menulis Form1.Show().
Layanan Web Saya
Salah satu kesulitan yang dihadapi orang ketika membuat kode layanan web adalah menentukan kelas mana yang akan dikodekan. My.WebServices menghilangkan proses penentuan ini dan menyediakan contoh proxy layanan Web sesuai permintaan.
My.WebServices paling cocok untuk panggilan sinkron ke layanan Web. Pola kode yang dihasilkan untuk menyediakan contoh proksi layanan Web sama dengan pola kode yang ditampilkan untuk mengembalikan contoh formulir.
Saya.Pengaturan
Yang baru di Visual Basic 2005 adalah Perancang Pengaturan, yang memungkinkan Anda menentukan pengaturan aplikasi berdasarkan aplikasi atau pengguna. Perancang membuat kelas yang dapat Anda gunakan untuk mengakses pengaturan Anda dengan cara yang sangat diketik. Anda dapat melihat contoh kelas MySettings dengan menampilkan Semua File di Solution Explorer dan mencari file MySettings.vb di bawah node MySettings.Settings.
Berikut ini adalah contoh properti yang dihasilkan untuk mengelola pengaturan aplikasi bernama SampleUserSetting:
PartialNotInheritableClassMySettings
MewarisiSistem.Konfigurasi.ApplicationSettingsBase
<Sistem.Diagnostik.DebuggerNonUserCode(),_
Sistem.Konfigurasi.UserScopedSettingAttribute(),_
Sistem.Konfigurasi.DefaultSettingValueAttribute(TryMe)>_
PublicPropertySampleUserSetting()AsString
Mendapatkan
ReturnCType(Saya(SampleUserSetting),String)
Dapatkan Akhir
Mengatur
Saya(SampleUserSetting)=nilai
Set Akhir
Properti Akhir
Kelas Akhir
Kelas yang dihasilkan melakukan semua pekerjaan berat untuk Anda. Untuk mengakses pengaturan ini, cukup ketik:
Pengaturan.Saya.SampleUserSetting
Sumber Daya Saya
Fitur baru lainnya di Visual Basic 2005 adalah Resource Designer, yang memungkinkan Anda menambahkan sumber daya ke aplikasi Anda. Resource Designer juga membuat modul yang dapat Anda gunakan untuk mengakses sumber daya di aplikasi Anda dengan cara yang sangat diketik. Misalnya, jika Anda menambahkan bitmap bernama Smiley ke proyek Anda, Anda dapat mengakses bitmap tersebut menggunakan My.Resources.Smiley. Anda dapat melihat contoh modul sumber daya yang dihasilkan dengan menampilkan Semua File di Solution Explorer proyek sampel dan mencari file MyResources.vb di bawah node MyResources.resx.
Berikut ini adalah contoh proyek sampel yang dihasilkan untuk mengembalikan properti pabrik untuk sumber daya Smiley:
PublicReadOnlyPropertySmiley()AsSystem.Drawing.Bitmap
Mendapatkan
ReturnCType(ResourceManager.GetObject(Smiley,_resCulture),_
Sistem.Gambar.Bitmap)
Dapatkan Akhir
Properti Akhir
Modul sumber daya yang diketik dengan kuat yang dihasilkan menangani ID sumber daya yang peka huruf besar-kecil, menggunakan kelas System.Resources.ResourceManager untuk mengambil sumber daya Anda, dan mengelola detail terkait pembuatan ResourceManager dengan benar untuk aplikasi Anda.
Untuk mengakses bitmap Smiley yang sama di VisualBasic2002 atau VisualBasic2003, pertama-tama Anda harus memasukkan bitmap tersebut ke dalam file .resx, yang mana hal ini sulit dilakukan. Cara lain adalah dengan memasukkannya ke dalam proyek sebagai sumber daya yang tertanam dan Anda harus ingat untuk mengubah tindakan pembangunan di kisi properti sumber daya yang akan menjadi sumber daya yang tertanam. Dengan cara ini, kode yang Anda tulis akan terlihat seperti ini:
DimCurrentAssemblyAsReflection.Assembly=_
Refleksi.Assembly.GetExecutingAssembly
DimBitMapStreamAsIO.Stream=_
CurrentAssembly.GetManifestResourceStream(_
WindowsApplication2.Smiley.bmp)
DimSmileyBitmapasDrawing.Bitmap=NewBitmap(BitMapStream)
Ada beberapa detail penting dalam kode ini yang perlu Anda ketahui. Anda harus mengetahuinya untuk mendapatkan Majelis yang sedang dijalankan dan memanggil GetManifestResourceStream() di atasnya. Anda harus ingat untuk memenuhi syarat nama sumber daya dengan nama namespace root. Anda harus mendapatkan izin huruf besar-kecil karena nama yang diteruskan ke GetManifestResourceStream() peka huruf besar-kecil. Anda harus mengetahui di mana mendefinisikan kelas aliran sehingga Anda dapat menangkap nilai kembalian GetManifestResource di objek aliran. Anda harus tahu cara membuat bitmap dari aliran. Anda mungkin merasa frustrasi ketika mencoba menentukan mengapa BitMapStream selalu mengembalikan Nothing karena salah satu masalah di atas.
Visual Basic 2005 memecahkan masalah pertama dengan menyediakan ResourceEditor, yang memudahkan penempatan sumber daya baru atau yang sudah ada ke dalam file .resx. Sumber daya ini kemudian dapat diakses dengan mudah menggunakan My. Yang perlu Anda lakukan hanyalah menulis yang berikut ini:
DimSmileyBitmapasDrawing.Bitmap=Sumber Daya Saya.Smiley
benang
Instance kelas yang tersedia di My diekspos dengan cara yang meringankan masalah threading, karena instance objek My disediakan berdasarkan per-thread. Artinya, instance Komputer Saya yang dikembalikan pada thread 1 berbeda dengan instance Komputer Saya yang dikembalikan pada thread 2. Artinya Anda tidak perlu menulis kode sinkronisasi saat menggunakan objek Saya.
Dalam aplikasi web, instance yang dikembalikan dari My disimpan berdasarkan permintaan.
ringkasan
Kita telah melihat bagaimana kelas My mengekspos .NET Framework dan bagaimana kelas yang dihasilkan secara dinamis dapat dibuat untuk melengkapi kelas My.
Terakhir, My mengurangi jumlah baris kode yang harus Anda tulis dan menyediakan akses ke fungsionalitas yang umum digunakan. Hal ini dilakukan dengan cara yang efisien, andal, dan aman untuk thread. Dalam lingkungan di mana efisiensi kerja programmer sangat penting, My dapat membantu Anda menyelesaikan pekerjaan dengan lebih cepat dan efektif.
->