2013-07-19 14 views
5

Sto cercando di creare una libreria di classi con una funzione per convertire gli interi binari in denari e viceversa, in modo da poterli importare in un altro progetto senza dover riscrivere la funzione. Funziona bene, ecco parte della classe:VB.NET - Funzioni di estensione all'interno di una classe?

Public Class BinaryDenary 
    Public Shared Function ToBinary(ByVal DenaryNumber As Integer) As Integer 
     Dim Binary As String = "" 
     While DenaryNumber > 0 
      If DenaryNumber Mod 2 = 1 Then 
       Binary = 1 & Binary 
      Else 
       Binary = 0 & Binary 
      End If 
      DenaryNumber \= 2 
     End While 
     Return CInt(Binary) 
    End Function 
End Class 

L'ho testato all'interno del progetto e funziona perfettamente.

ToBinary(3) 'Returns 11 
ToDenary(110) 'Returns 6 

Ma - per lo più per motivi estetici - mi piacerebbe essere in grado di utilizzarlo come un metodo di estensione, in modo che possa prendere una variabile e fare questo:

NormalInt.ToBinary(3) 

Ma non posso scrivere metodi di estensione all'interno di una classe. C'è un modo per farlo? Non è estremamente importante, ma mi piace usare i metodi di estensione dove posso.

risposta

12

un metodo di estensione scritta in VB .NET, deve essere in una Module e identificati secondo l'attributo Extension, qualcosa di simile:

Public Module BinaryDenary 

    <Extension()> 
    Function ToBinary(ByVal DenaryNumber As Integer) As Integer 
     Dim Binary As String = "" 
     While DenaryNumber > 0 
      If DenaryNumber Mod 2 = 1 Then 
       Binary = 1 & Binary 
      Else 
       Binary = 0 & Binary 
      End If 
      DenaryNumber \= 2 
     End While 
     Return CInt(Binary) 
    End Function 

End Module 

Se il modulo non è nello stesso namespace, si dovrebbe importa lo spazio dei nomi in cui viene utilizzato.

+0

Qual è lo spazio dei nomi? Il modulo? Lo impongo nello stesso modo in cui importi una classe? – Lou

+0

Namespace è un altro modo per organizzare il codice, leggi qui [Understanding Assembly and Namespace] (http://msdn.microsoft.com/en-us/library/ms973231.aspx) Un modulo è un codice di raccolta logico all'interno un assemblaggio, leggi qui [Che cos'è un modulo in .NET?] (http://stackoverflow.com/questions/645728/what-is-a-module-in-net) –

+0

Quindi, per chiarire: I dovrebbe scrivere le funzioni all'interno di un nuovo modulo in un Namespace separato? E dovrebbe essere in un file .vb separato? – Lou