Bagikan melalui


Memperluas My Namespace di Visual Basic

Namespace My di Visual Basic mengekspos properti dan metode yang memungkinkan Anda dengan mudah memanfaatkan kemampuan .NET Framework. Namespace My menyederhanakan masalah pemrograman umum, sering mengurangi tugas yang sulit ke satu baris kode. Selain itu, My namespace sepenuhnya dapat diperluas sehingga Anda dapat menyesuaikan perilaku My dan menambahkan layanan baru ke hierarkinya untuk beradaptasi dengan kebutuhan aplikasi tertentu. Topik ini membahas cara menyesuaikan anggota My namespace yang ada dan cara menambahkan kelas kustom Anda sendiri ke My namespace.

Menyesuaikan anggota My namespace yang sudah ada

Namespace My di Visual Basic memaparkan informasi yang sering digunakan tentang aplikasi, komputer, dan lainnya. Untuk daftar lengkap objek di My namespace, lihat Referensi Saya. Anda mungkin harus menyesuaikan anggota My namespace yang ada sehingga mereka lebih cocok dengan kebutuhan aplikasi Anda. Properti apa pun dari sebuah objek di dalam My namespace yang tidak hanya baca dapat diatur ke nilai kustom.

Misalnya, asumsikan bahwa Anda sering menggunakan My.User objek untuk mengakses konteks keamanan saat ini bagi pengguna yang menjalankan aplikasi Anda. Namun, perusahaan Anda menggunakan objek pengguna kustom untuk mengekspos informasi dan kemampuan tambahan bagi pengguna dalam perusahaan. Dalam skenario ini, Anda dapat mengganti nilai My.User.CurrentPrincipal default properti dengan instans objek utama kustom Anda sendiri, seperti yang ditunjukkan dalam contoh berikut:

My.User.CurrentPrincipal = CustomPrincipal

Mengatur properti CurrentPrincipal pada objek My.User mengubah identitas yang digunakan oleh aplikasi saat berjalan. Objek My.User , pada gilirannya, mengembalikan informasi tentang pengguna yang baru ditentukan.

Menambahkan anggota ke My objek

Jenis yang dikembalikan dari My.Application dan My.Computer didefinisikan sebagai Partial kelas. Oleh karena itu, Anda dapat memperluas My.Application objek dan My.Computer dengan membuat Partial kelas bernama MyApplication atau MyComputer. Kelas tidak boleh merupakan kelas Private. Jika Anda menentukan kelas sebagai bagian dari namespace My, Anda dapat menambahkan properti dan metode yang akan disertakan dalam objek My.Application atau My.Computer.

Contoh berikut menambahkan properti bernama DnsServerIPAddresses ke My.Computer objek:

Imports System.Net.NetworkInformation

Namespace My

  Partial Class MyComputer
    Friend ReadOnly Property DnsServerIPAddresses() As IPAddressCollection
      Get
        Dim dnsAddressList As IPAddressCollection = Nothing

        For Each adapter In System.Net.NetworkInformation.
          NetworkInterface.GetAllNetworkInterfaces()

          Dim adapterProperties = adapter.GetIPProperties()
          Dim dnsServers As IPAddressCollection = adapterProperties.DnsAddresses
          If dnsAddressList Is Nothing Then
            dnsAddressList = dnsServers
          Else
            dnsAddressList.Union(dnsServers)
          End If
        Next adapter

        Return dnsAddressList
      End Get
    End Property
  End Class

End Namespace

Menambahkan objek kustom ke namespace My

Meskipun namespace My menyediakan solusi untuk banyak tugas pemrograman umum, Anda mungkin menemukan tugas yang tidak ditangani oleh namespace My. Misalnya, aplikasi Anda mungkin mengakses layanan direktori kustom untuk data pengguna, atau aplikasi Anda mungkin menggunakan rakitan yang tidak diinstal secara default dengan Visual Basic. Anda dapat memperluas My namespace untuk menyertakan solusi kustom pada tugas-tugas umum yang khusus untuk lingkungan Anda. Namespace My dapat dengan mudah diperluas untuk menambahkan anggota baru untuk memenuhi kebutuhan aplikasi yang berkembang. Selain itu, Anda dapat menyebarkan ekstensi namespace anda My ke pengembang lain sebagai templat Visual Basic.

Menambahkan anggota ke My namespace

Karena My adalah namespace seperti namespace lainnya, Anda dapat menambahkan properti tingkat atas ke dalamnya dengan hanya menambahkan modul dan menentukan Namespace dari My. Buat anotasi modul dengan atribut seperti yang HideModuleName ditunjukkan dalam contoh berikut. Atribut HideModuleName memastikan bahwa IntelliSense tidak akan menampilkan nama modul saat menampilkan anggota namespace My.

Namespace My
  <HideModuleName()> 
  Module MyCustomModule

  End Module
End Namespace

Untuk menambahkan anggota ke My namespace, tambahkan properti sesuai kebutuhan ke modul. Untuk setiap properti yang ditambahkan ke My namespace, tambahkan bidang privat bertipe ThreadSafeObjectProvider(Of T), di mana tipe tersebut adalah tipe yang dikembalikan oleh properti kustom Anda. Bidang ini digunakan untuk membuat instans objek yang aman dari gangguan utas untuk dikembalikan oleh properti dengan memanggil metode GetInstance. Akibatnya, setiap utas yang mengakses properti yang diperluas menerima instance-nya sendiri dari jenis yang dikembalikan. Contoh berikut menambahkan properti bernama SampleExtension yang berjenis SampleExtension ke My namespace:

Namespace My
  <HideModuleName()> 
  Module MyCustomExtensions
    Private _extension As New ThreadSafeObjectProvider(Of SampleExtension)
    Friend ReadOnly Property SampleExtension() As SampleExtension
      Get
        Return _extension.GetInstance()
      End Get
    End Property
  End Module
End Namespace

Menambahkan peristiwa ke objek kustom My

Anda dapat menggunakan My.Application objek untuk mengekspos peristiwa untuk objek kustom My Anda dengan memperluas MyApplication kelas parsial di My namespace. Untuk proyek berbasis Windows, Anda dapat mengklik ganda simpul Proyek Saya untuk proyek Anda di Penjelajah Solusi. Di Visual Basic Project Designer, klik tab Aplikasi lalu klik tombol Tampilkan Peristiwa Aplikasi . File baru yang diberi nama ApplicationEvents.vb akan dibuat. Ini berisi kode berikut untuk memperluas MyApplication kelas:

Namespace My
  Partial Friend Class MyApplication
  End Class
End Namespace

Anda dapat menambahkan penanganan aktivitas untuk objek kustom My Anda dengan menambahkan penanganan aktivitas kustom ke MyApplication kelas . Peristiwa kustom memungkinkan Anda menambahkan kode yang akan dijalankan saat penanganan aktivitas ditambahkan, dihapus, atau peristiwa dinaikkan. Perhatikan bahwa AddHandler kode untuk peristiwa kustom hanya berjalan jika kode ditambahkan oleh pengguna untuk menangani peristiwa. Misalnya, pertimbangkan bahwa SampleExtension objek dari bagian sebelumnya memiliki Load peristiwa yang ingin Anda tambahkan penanganan aktivitas kustomnya. Contoh kode berikut menunjukkan penanganan aktivitas kustom bernama SampleExtensionLoad yang akan dipanggil saat My.SampleExtension.Load peristiwa terjadi. Ketika kode ditambahkan untuk menangani peristiwa baru My.SampleExtensionLoad, bagian AddHandler dari kode acara kustom ini dijalankan. Metode MyApplication_SampleExtensionLoad ini disertakan dalam contoh kode untuk menunjukkan contoh penanganan peristiwa My.SampleExtensionLoad. Perhatikan bahwa SampleExtensionLoad peristiwa akan tersedia saat Anda memilih opsi Peristiwa Aplikasi Saya di daftar drop-down kiri di atas Editor Kode saat Anda mengedit file ApplicationEvents.vb .

Namespace My

  Partial Friend Class MyApplication

    ' Custom event handler for Load event.
    Private _sampleExtensionHandlers As EventHandler

    Public Custom Event SampleExtensionLoad As EventHandler
      AddHandler(ByVal value As EventHandler)
        ' Warning: This code is not thread-safe. Do not call
        ' this code from multiple concurrent threads.
        If _sampleExtensionHandlers Is Nothing Then
          AddHandler My.SampleExtension.Load, AddressOf OnSampleExtensionLoad
        End If
        _sampleExtensionHandlers = 
            System.Delegate.Combine(_sampleExtensionHandlers, value)
      End AddHandler
      RemoveHandler(ByVal value As EventHandler)
        _sampleExtensionHandlers = 
          System.Delegate.Remove(_sampleExtensionHandlers, value)
      End RemoveHandler
      RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
        If _sampleExtensionHandlers IsNot Nothing Then
          _sampleExtensionHandlers.Invoke(sender, e)
        End If
      End RaiseEvent
    End Event

    ' Method called by custom event handler to raise user-defined
    ' event handlers.
    <Global.System.ComponentModel.EditorBrowsable( 
         Global.System.ComponentModel.EditorBrowsableState.Advanced)> 
      Protected Overridable Sub OnSampleExtensionLoad( 
                ByVal sender As Object, ByVal e As EventArgs)
      RaiseEvent SampleExtensionLoad(sender, e)
    End Sub

    ' Event handler to call My.SampleExtensionLoad event.
    Private Sub MyApplication_SampleExtensionLoad( 
        ByVal sender As Object, ByVal e As System.EventArgs
        ) Handles Me.SampleExtensionLoad

    End Sub
  End Class
End Namespace

Pedoman desain

Saat Anda mengembangkan ekstensi ke My namespace, gunakan panduan berikut untuk membantu meminimalkan biaya pemeliharaan komponen ekstensi Anda.

  • Sertakan hanya logika untuk ekstensi perangkat lunak. Logika yang disertakan dalam ekstensi My namespace hanya boleh menyertakan kode yang diperlukan untuk mengekspos fungsionalitas yang dibutuhkan di My namespace. Karena ekstensi Anda akan berada di proyek pengguna sebagai kode sumber, memperbarui komponen ekstensi menimbulkan biaya pemeliharaan yang tinggi dan harus dihindari jika memungkinkan.
  • Meminimalkan asumsi proyek. Saat Anda membuat ekstensi namespace dari My, jangan berasumsi adanya sekumpulan referensi, impor tingkat proyek, atau pengaturan kompilator tertentu (misalnya, Option Strict dinonaktifkan). Sebagai gantinya, minimalkan dependensi dan memperjelas secara penuh semua referensi jenis dengan menggunakan kata kunci Global. Selain itu, pastikan bahwa ekstensi dikompilasi dengan Option Strict aktif untuk meminimalkan kesalahan dalam ekstensi.
  • Mengisolasi kode ekstensi. Menempatkan kode dalam satu file membuat ekstensi Anda mudah disebarkan sebagai templat item Visual Studio. Untuk informasi selengkapnya, lihat "Mengemas dan Menyebarkan Ekstensi" nanti dalam topik ini. Menempatkan semua My kode ekstensi namespace dalam satu file atau folder terpisah dalam proyek juga akan membantu pengguna menemukan My ekstensi namespace.

Merancang perpustakaan kelas untuk My

Seperti halnya dengan sebagian besar model objek, beberapa pola desain bekerja dengan baik di namespace My dan beberapa tidak. Saat merancang ekstensi ke My namespace, pertimbangkan prinsip berikut:

  • Metode Tanpa Status. Metode di My namespace harus memberikan solusi lengkap untuk tugas tertentu. Pastikan bahwa nilai parameter yang diteruskan ke metode menyediakan semua input yang diperlukan untuk menyelesaikan tugas tertentu. Hindari membuat metode yang mengandalkan status sebelumnya, seperti koneksi terbuka ke sumber daya.
  • Contoh global. Satu-satunya status yang dipertahankan di My namespace adalah global untuk proyek. Misalnya, My.Application.Info merangkum status yang dibagikan di seluruh aplikasi.
  • Jenis parameter sederhana. Pertahankan hal-hal sederhana dengan menghindari jenis parameter yang kompleks. Sebagai gantinya, buat metode yang tidak mengambil input parameter atau yang mengambil jenis input sederhana seperti string, jenis primitif, dan sebagainya.
  • Metode pabrik. Beberapa jenis dengan sendirinya sulit untuk diinstansiasi. Menyediakan metode pabrik sebagai ekstensi ke My namespace memungkinkan Anda untuk lebih mudah menemukan dan menggunakan jenis yang termasuk dalam kategori ini. Contoh metode pabrik yang berfungsi dengan baik adalah My.Computer.FileSystem.OpenTextFileReader. Ada beberapa jenis aliran yang tersedia di .NET Framework. Dengan menentukan file teks secara khusus, OpenTextFileReader membantu pengguna memahami aliran mana yang akan digunakan.

Pedoman ini tidak menghalangi prinsip desain umum untuk pustaka kelas. Sebaliknya, mereka adalah rekomendasi yang dioptimalkan untuk pengembang yang menggunakan Visual Basic dan My namespace. Untuk prinsip desain umum untuk membuat pustaka kelas, lihat Panduan Desain Kerangka Kerja.

Mengemas dan menyebarkan ekstensi

Anda dapat menyertakan My ekstensi namespace dalam templat proyek Visual Studio, atau Anda dapat mengemas ekstensi dan menyebarkannya sebagai templat item Visual Studio. Saat mengemas ekstensi ruang nama Anda sebagai My templat item Visual Studio, Anda dapat memanfaatkan kemampuan tambahan yang ditawarkan oleh Visual Basic. Kemampuan ini memungkinkan Anda menyertakan ekstensi saat proyek mereferensikan rakitan tertentu, atau memungkinkan pengguna untuk secara eksplisit menambahkan ekstensi namespace Anda My dengan menggunakan halaman Ekstensi Saya dari Visual Basic Project Designer.

Untuk detail tentang cara menyebarkan My ekstensi namespace, lihat Mengemas dan Menyebarkan Ekstensi Saya Kustom.

Lihat juga