Visual Basic'te My Ad Alanını Genişletme

My Visual Basic'teki ad alanı, .NET Framework'ün gücünden kolayca yararlanmanızı sağlayan özellikleri ve yöntemleri kullanıma sunar. Ad My alanı yaygın programlama sorunlarını basitleştirir ve genellikle zor bir görevi tek bir kod satırına düşürür. Buna ek olarak, My ad alanı tamamen genişletilebilir, böylece belirli uygulama gereksinimlerine uyum sağlamak için öğesinin My davranışını özelleştirebilir ve hiyerarşisine yeni hizmetler ekleyebilirsiniz. Bu konu başlığında hem ad alanının mevcut üyelerini My özelleştirme hem de ad alanına kendi özel sınıflarınızı ekleme konuları ele alınmaktadır My .

Mevcut My ad alanı üyelerini özelleştirme

My Visual Basic'teki ad alanı, uygulamanız, bilgisayarınız ve daha fazlası hakkında sık kullanılan bilgileri kullanıma sunar. Ad alanı içindeki My nesnelerin tam listesi için bkz . Başvurum. Ad alanının mevcut üyelerini, uygulamanızın My gereksinimlerine daha uygun olacak şekilde özelleştirmeniz gerekebilir. Ad alanında My salt okunur olmayan bir nesnenin herhangi bir özelliği özel bir değere ayarlanabilir.

Örneğin, uygulamanızı çalıştıran kullanıcının geçerli güvenlik bağlamlarına erişmek için nesnesini sık kullandığınızı My.User varsayalım. Ancak şirketiniz, şirket içindeki kullanıcılara yönelik ek bilgileri ve özellikleri kullanıma açmak için özel bir kullanıcı nesnesi kullanır. Bu senaryoda, aşağıdaki örnekte gösterildiği gibi özelliğin My.User.CurrentPrincipal varsayılan değerini kendi özel asıl nesnenizin bir örneğiyle değiştirebilirsiniz:

My.User.CurrentPrincipal = CustomPrincipal

nesnesinde özelliğinin CurrentPrincipalMy.User ayarlanması, uygulamanın altında çalıştığı kimliği değiştirir. Nesnesi My.User de yeni belirtilen kullanıcı hakkında bilgi döndürür.

Nesnelere My üye ekleme

ve'den My.ApplicationMy.Computer döndürülen türler sınıf olarak Partial tanımlanır. Bu nedenle, veya adlı bir Partial sınıf oluşturarak ve My.Computer nesnelerini genişletebilirsinizMy.Application.MyApplicationMyComputer Sınıf bir Private sınıf olamaz. sınıfını ad alanının bir parçası My olarak belirtirseniz, veya My.Computer nesnelerine eklenecek My.Application özellikler ve yöntemler ekleyebilirsiniz.

Aşağıdaki örnek, nesnesine My.Computer adlı DnsServerIPAddresses bir özellik ekler:

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

Ad alanına My özel nesneler ekleme

Ad alanı My birçok yaygın programlama görevi için çözümler sağlasa da, ad alanının My ele almadığı görevlerle karşılaşabilirsiniz. Örneğin, uygulamanız kullanıcı verileri için özel dizin hizmetlerine erişebilir veya uygulamanız Visual Basic ile varsayılan olarak yüklenmeyen derlemeleri kullanabilir. Ad alanını My , ortamınıza özgü ortak görevlere özel çözümler içerecek şekilde genişletebilirsiniz. Ad My alanı, artan uygulama gereksinimlerini karşılamak üzere yeni üyeler eklemek için kolayca genişletilebilir. Ayrıca, ad alanı uzantılarınızı My visual basic şablonu olarak diğer geliştiricilere dağıtabilirsiniz.

Ad alanına My üye ekleme

My Diğer ad alanları gibi bir ad alanı olduğundan, yalnızca bir modül ekleyip öğesini belirterek NamespaceMybu ad alanına üst düzey özellikler ekleyebilirsiniz. Aşağıdaki örnekte gösterildiği gibi özniteliğiyle HideModuleName modüle ek açıklama ekleyin. özniteliği, HideModuleName Ad alanının üyelerini görüntülerken IntelliSense'in My modül adını görüntülememesini sağlar.

Namespace My
  <HideModuleName()> 
  Module MyCustomModule

  End Module
End Namespace

Ad alanına üye eklemek için My modüle gereken özellikleri ekleyin. Ad alanına eklenen her özellik için My türünde bir özel alan ThreadSafeObjectProvider(Of T)ekleyin; burada tür, özel özelliğinizin döndürdüğü türdür. Bu alan, yöntemi çağrılarak GetInstance özelliği tarafından döndürülecek iş parçacığı güvenli nesne örnekleri oluşturmak için kullanılır. Sonuç olarak, genişletilmiş özelliğe erişen her iş parçacığı döndürülen türün kendi örneğini alır. Aşağıdaki örnek ad alanına türünde SampleExtensionMy adlı SampleExtension bir özellik ekler:

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

Özel My nesnelere olay ekleme

Ad alanında My.Application kısmi sınıfı My genişleterek MyApplication özel My nesnelerinizin olaylarını kullanıma açmak için nesnesini kullanabilirsiniz. Windows tabanlı projeler için, Çözüm Gezgini'da projeniz için içinde Projem düğümüne çift tıklayabilirsiniz. Visual Basic Project Tasarım Aracı, Uygulama sekmesine ve ardından Uygulama Olaylarını Görüntüle düğmesine tıklayın. ApplicationEvents.vb adlı yeni bir dosya oluşturulur. Sınıfını genişletmek MyApplication için aşağıdaki kodu içerir:

Namespace My
  Partial Friend Class MyApplication
  End Class
End Namespace

Sınıfına özel olay işleyicileri ekleyerek özel My nesneleriniz için olay işleyicileri MyApplication ekleyebilirsiniz. Özel olaylar, bir olay işleyici eklendiğinde, kaldırıldığında veya olay tetiklendiğinde yürütülecek kod eklemenize olanak tanır. Özel olay kodunun AddHandler yalnızca olayı işlemek için kullanıcı tarafından kod eklendiğinde çalıştırıldığını unutmayın. Örneğin, önceki bölümdeki SampleExtension nesnenin özel olay işleyicisi eklemek istediğiniz bir Load olayı olduğunu düşünün. Aşağıdaki kod örneği, olay gerçekleştiğinde çağrılacak adlı SampleExtensionLoad özel bir olay işleyicisini My.SampleExtension.Load gösterir. Yeni My.SampleExtensionLoad olayı işlemek için kod eklendiğinde, AddHandler bu özel olay kodunun bölümü yürütülür. yöntemi MyApplication_SampleExtensionLoad , olayı işleyen bir olay işleyicisi örneğini göstermek için kod örneğine My.SampleExtensionLoad eklenir. SampleExtensionLoad ApplicationEvents.vb dosyasını düzenlerken Kod Düzenleyicisi'nin üst kısmındaki sol açılan listede Uygulama Olaylarım seçeneğini belirlediğinizde olayın kullanılabilir olacağını unutmayın.

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

Tasarım yönergeleri

Ad alanına uzantı geliştirirken My , uzantı bileşenlerinizin bakım maliyetlerini en aza indirmeye yardımcı olmak için aşağıdaki yönergeleri kullanın:

  • Yalnızca uzantı mantığını ekleyin. Ad alanı uzantısına dahil edilen My mantık yalnızca ad alanında gerekli işlevselliği My göstermek için gereken kodu içermelidir. Uzantınız kaynak kod olarak kullanıcı projelerinde bulunacağından uzantı bileşeninin güncelleştirilmesi yüksek bakım maliyetine neden olur ve mümkünse kaçınılmalıdır.
  • Proje varsayımlarını en aza indirin. Ad alanı uzantılarınızı My oluştururken bir dizi başvuru, proje düzeyinde içeri aktarma veya belirli derleyici ayarları (örneğin kapalı Option Strict ) varsaymayın. Bunun yerine, anahtar sözcüğünü kullanarak bağımlılıkları en aza indirin ve tüm tür başvurularını tam olarak niteler Global . Ayrıca uzantıdaki hataları en aza indirmek için uzantının ile birlikte Option Strict derlendiğinden emin olun.
  • Uzantı kodunu yalıtın. Kodu tek bir dosyaya yerleştirmek, uzantınızı Visual Studio öğe şablonu olarak kolayca dağıtılabilir hale getirir. Daha fazla bilgi için bu konunun devamında yer alan "Uzantıları Paketleme ve Dağıtma" bölümüne bakın. Tüm ad alanı uzantısı kodunu tek bir dosyaya My veya projeye ayrı bir klasöre yerleştirmek, kullanıcıların ad alanı uzantısını bulmasına My da yardımcı olur.

için sınıf kitaplıkları tasarlama My

Çoğu nesne modelinde olduğu gibi, bazı tasarım desenleri ad alanında My iyi çalışır ve diğerleri çalışmaz. Ad alanına bir uzantı My tasarlarken aşağıdaki ilkeleri göz önünde bulundurun:

  • Durum bilgisi olmayan yöntemler. Ad alanı içindeki My yöntemler belirli bir göreve eksiksiz bir çözüm sağlamalıdır. yöntemine geçirilen parametre değerlerinin belirli bir görevi tamamlamak için gereken tüm girişleri sağladığından emin olun. Kaynaklara açık bağlantılar gibi önceki durumu kullanan yöntemler oluşturmaktan kaçının.
  • Genel örnekler. Ad alanında My tutulan tek durum, projenin genel durumudur. Örneğin, My.Application.Info uygulama genelinde paylaşılan durumu kapsüller.
  • Basit parametre türleri. Karmaşık parametre türlerinden kaçınarak işleri basit tutun. Bunun yerine, parametre girişi almayan veya dizeler, ilkel türler gibi basit giriş türlerini alan yöntemler oluşturun.
  • Fabrika yöntemleri. Bazı türlerin örneğini oluşturmak mutlaka zordur. Fabrika yöntemlerinin ad alanına uzantı My olarak sağlanması, bu kategoriye giren türleri daha kolay bulmanızı ve kullanmanızı sağlar. İyi çalışan bir fabrika yöntemi örneğidir My.Computer.FileSystem.OpenTextFileReader. .NET Framework'te kullanılabilen çeşitli akış türleri vardır. metin dosyalarını özel olarak belirterek, OpenTextFileReader kullanıcının hangi akışın kullanılacağını anlamasına yardımcı olur.

Bu yönergeler, sınıf kitaplıkları için genel tasarım ilkelerini içermez. Bunun yerine, Visual Basic ve My ad alanını kullanan geliştiriciler için iyileştirilmiş önerilerdir. Sınıf kitaplıkları oluşturmaya yönelik genel tasarım ilkeleri için bkz . Çerçeve Tasarım Yönergeleri.

Uzantıları paketleme ve dağıtma

Ad alanı uzantılarını bir Visual Studio proje şablonuna ekleyebilir My veya uzantılarınızı paketleyip Visual Studio öğe şablonu olarak dağıtabilirsiniz. Ad alanı uzantılarınızı My Visual Studio öğe şablonu olarak paketlediğinizde, Visual Basic tarafından sağlanan ek özelliklerden yararlanabilirsiniz. Bu özellikler, bir proje belirli bir derlemeye başvurduğunda uzantı eklemenize veya kullanıcıların Visual Basic Project Tasarım Aracı Uzantılarım sayfasını kullanarak ad alanı uzantınızı My açıkça eklemesine olanak tanır.

Ad alanı uzantılarını dağıtma My hakkında ayrıntılı bilgi için bkz . Özel Uzantılarımı Paketleme ve Dağıtma.

Ayrıca bkz.