2015-06-24 15 views
8

Sono confuso con l'implementazione Static in VB.NET. In C#, possiamo creare classi statiche e metodi statici per scrivere metodi di utilità per la nostra applicazione.Implementazione del metodo statico in VB.NET

Ora, VB.NET ci consente di creare Module al posto della classe statica. Se creiamo un metodo nel modulo, per impostazione predefinita diventa statico. Ma nella mia richiesta, ho scritto il codice qui sotto:

Public Class Utility 
    Public Shared Function GetValue() As String 
     // My code 
    End Function 
End Class 

Scrivendo il codice, sono in grado di accedere al metodo utilità come Utility.GetValue(). Poiché questa non è una classe statica, dovrei istanziarne un oggetto. Ma questo metodo è disponibile sia per la classe e oggetti di Utility

Ora le mie domande sono:

  1. è l'implementazione che ho fatto possa violare una delle caratteristiche della classe statica quel modulo forniscono?
  2. Quale sarà la differenza tra questo e l'implementazione di un modulo, invece?
  3. Se creo invece un modulo, lo scopo sarà lo stesso di questa classe? Voglio accedere al metodo in tutto il progetto e ad altri progetti in cui viene fatto riferimento a questo.

Ho provato a consultare più articoli, ma da nessuna parte ho trovato queste risposte esatte. Per favore aiuto.

+1

Dietro le quinte, una funzione pubblica in un modulo viene convertita in una funzione condivisa di una classe; Sono la stessa cosa. Anche se Utility può essere istanziata, non puoi ** accedere a GetValue() attraverso un'istanza di Utility; dovresti comunque usare 'Utility.GetValue()'. –

+2

La differenza principale è che con una classe potresti avere anche membri non condivisi in Utility (non puoi accedere a quegli elementi non condivisi da quelli condivisi). Ma rispetto a ** solo ** i membri condivisi, sarà lo stesso di utilizzare un modulo. –

+0

Sono in grado di accedere anche al metodo 'GetValue()' per le istanze dell'oggetto. Ecco dove nasce la mia confusione. @Idle_Mind –

risposta

15

Un modulo VB.NET è una classe statica. Il compilatore gestisce questo per te. Ogni metodo e proprietà su di esso è static (Shared).

Una classe con un membro (condiviso) statico su di esso è esattamente questo: una classe con un membro statico (condiviso). Non è necessario crearne un'istanza per accedere al metodo statico (Condiviso), ma è necessario accedere a qualsiasi membro dell'istanza.

È anche possibile definire un in un modulo e diventa il costruttore statico del modulo. La prima volta che si tenta di richiamare un membro sul modulo, verrà invocato il costruttore statico per inizializzare la classe statica.

Problemi correlati