|
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 |
|