Gli oggetti predefiniti di VB sono un tipo di singleton?

6

Gli oggetti predefiniti supportati dalla parola chiave My in VB.net sono un tipo di singleton? In caso contrario, qual è la differenza?

Ancora una volta questa caratteristica di "oggetto predefinito" è qualcosa di utile? Se sì, allora perché non è implementato in altre lingue come C #?

    
posta Gulshan 20.12.2010 - 17:35
fonte

2 risposte

8

Non è un Singleton.

My è solo uno spazio dei nomi contenente classi, metodi e proprietà statiche che puntano ad altre parti del framework .NET e forniscono alcune funzionalità aggiuntive (ad esempio CopyDirectory ). Pensa a un insieme di scorciatoie, una velocità -dial di persone.

Visual Basic fornisce supporto per lingua / compilatore con la parola chiave My . Puoi utilizzare le classi My in C # aggiungendo un riferimento a Microsoft.VisualBasic.dll, ma è scomodo e non tutte le classi sono compatibili con C # (sono specifiche VB). In C #, a meno che tu non voglia alcune delle funzionalità di VB (come "CopyDirectory"), è più conveniente fare semplicemente riferimento alle classi del framework .NET direttamente, IMO.

Visual Basic ha una filosofia linguistica leggermente diversa rispetto a C #. In origine, VB doveva essere il linguaggio delle "applicazioni" e C # doveva essere il linguaggio dei "sistemi". Da allora, le due lingue sono convergenti e le serie di funzioni delle due sono quasi indistinguibili, con alcune differenze notevoli (essendo questa una, Letterali XML un'altra).

Sono abbastanza sicuro che, se hai chiesto a Eric Lippert oa uno degli altri membri del team di compilatori C #, ti avrebbero detto che l'implementazione di nuove funzionalità è un tiro alla fune tra le risorse disponibili e l'importanza delle funzionalità, e che questa particolare caratteristica non ha mai raggiunto la soglia.

Naviga in .NET Framework e nei tuoi progetti con My My Namespace
link

Il mio spazio dei nomi
link

    
risposta data 20.12.2010 - 17:48
fonte
0

My è uno spazio dei nomi non un singleton, ma "gli oggetti predefiniti supportati da My keyword" sono singleton locali del thread (cioè un'istanza per thread) come si può vedere quando si usa Riflettore.

E il ThreadSafeObjectProvider<T> che fornisce questo supporto è generato in ogni assembly compilato da VB.NET ed è Friend quindi non è disponibile per uso esterno.

Tuttavia la sua implementazione è facile da replicare nel tuo ThreadSafeSinglton<T> . È in effetti un normale modello singleton .NET, tranne che nel campo di supporto è presente l'attributo <ThreadStatic> .

    
risposta data 26.01.2011 - 03:14
fonte

Leggi altre domande sui tag