Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Guida al Visual Basic .NET - Estendere il Namespace My

Guida al Visual Basic .NET

Capitolo 107° - Estendere il Namespace My

<< Precedente Prossimo >>

Come se non bastasse la sua già straordinaria potenza, il namespace My è ulteriormente estendibile dal programmatore, in modo da adattarlo alle specifiche esigenze dell'applicazione. Prima di utilizzare questa funzionalità, tuttavia, sarebbe opportuno valutare anche le alternative e concludere se non sia meglio una normale libreria oppure un file serializzato.
Ad ogni modo, è possibile ampliare questo namespace grazie all'ausilio delle classi Partial: infatti My è a tutti gli effetti un normale namespace, definito in un comune file *.vb, nascosto però agli occhi dello sviluppatore, dato che solo il compilatore lo utilizza. In tale file vengono definiti solamente i membri inseriti dall'utente e non è assolutamente consigliabile modificarlo manualmente. La soluzione più corretta consiste, invece, nel dichiarare nel progetto un nuovo namespace, sempre di nome My, che, grazie alla keyword Partial usata dal compilatore nella creazione automatica, sarà interpretato come estensione di quello originale.
Durante questo processo è possibile aggiungere due tipi di oggetti: di primo e di secondo livello. Quelli di primo livello sono classi definite all'interno di My con un nome nuovo e ne diventano membri effettivi, in modo da essere resi accessibili con la semplice dicitura My.[Classe]. In questo ambito esistono anche due differenti modi di dichiarare oggetti di questo tipo. Il primo metodo consiste nel creare una nuova classe all'interno di My:

Namespace My
    Public Class Utilities
        'Con questa versione, si utilizza la classe come contenitore
        'di metodi o membri statici, rendendola simile a un modulo
        Public Shared Function Percent(ByVal Num As Int32, _
            ByVal Max As Int32) As Single
            Return (Num * 100) / Max
        End Function
    End Class
End Namespace 

Il secondo metodo prevede la creazione di un modulo nascosto entro il quale figura una proprietà che espone un'istanza della classe, definita altrove. Infatti, l'infrastruttura di My non espone direttamente i membri Application, Settings, eccetera... ma moduli pubblici nascosti con nomi del tipo MyApplication e MySettings (anteponendo quindi "My" al nome del membro) nei quali vengono definiti tali oggetti come proprietà. Per facilitare la compresione, ecco un esempio simile a quello di prima:

Namespace My
    'L'attributo HideModuleName permette di nascondere il
    'nome del modulo nella scala gerarchica dell'IntelliSense
    'e accedere direttamente a Utilities
    <DebuggerNonUserCode(), _
    Microsoft.VisualBasic.HideModuleName()> _
    Public Module MyUtilities
        Private _Utilities As New Utilities

        Public ReadOnly Property Utilities() As Utilities
            Get
                Return _Utilities
            End Get
        End Property
    End Module
End Namespace

Public Class Utilities
    'Con questa versione, si utilizza la classe come vero oggetto,
    'ma i metodi di istanza che non utilizzano altri campi d'istanza
    'possono comunque essere utilizzati allo stesso modo dei metodi
    'statici, poichè l'oggetto è già inizializzato all'interno del
    'modulo sopra definito
    Public Function Percent(ByVal Num As Int32, _
        ByVal Max As Int32) As Single
        Return (Num * 100) / Max
    End Function
End Class 

Per aggiungere, invece, oggetti di secondo livello, ossia gerarchicamente subordinati a uno qualsiasi dei membri già appartenenti a My, basta inserire nel nuovo namespace una classe Partial Friend il cui nome sia formato dal prefisso "My" e dal nome del membro da cui derivare la classe in questione. Ad esempio, questo codice espone il dns di un server usato per le connessioni internet in My.Application:

Namespace My
    'Aggiunge membri a My.Application
    Partial Friend Class MyApplication
        Private _ServerName As String = "http://www.example.com"

        Public Property ServerName() As String
            Get
                Return _ServerName
            End Get
            Set(ByVal Value As String)
                _ServerName = Value
            End Set
        End Property
    End Class
End Namespace 
<< Precedente Prossimo >>
A proposito dell'autore

Programmatore e analista .NET 2005/2008/2010 (in particolare C# e VB.NET), anche nell'implementazione Mono per Linux. Conoscenze approfondite di Pascal, PHP, XML, HTML 4.01/5, CSS 2.1/3, Javascript (e jQuery). Conoscenze buone di C, LUA, GML, Ruby, XNA, AJAX e Assembly 68000. Competenze basilari di C++, SQL, Hlsl, Java.