Istanza di un oggetto static in Application_Start

mercoledì 28 novembre 2012 - 13.00
Tag Elenco Tags  C#  |  .NET 4.0  |  Visual Studio 2010

andrestu Profilo | Expert

Salve a tutti,
invio questo post per avere delucidazioni in merito, questo è il contesto:

definisco in un file .cs all'interno del mio progetto web una classe statica con all'interno un campo di un oggetto statico

public static class MyManager
{
public static MyObject Esempio;
public static void Init()
{
Esempio = new MyObject();
}
}

richiamo in Application_Start(Global.asax) il metodo statico Init() il quale mi inzializza l'oggetto "Esempio"
a questo punto mi fermo con il debug su un evento qualsiasi di una pagina qualsiasi del mio progetto, ad esempio Page_Init e al suo interno controllo il valore di "Esempio"

protected void Page_Init(object sender, EventArgs e)
{
... MyManager.Esempio ...
}

mi spiegate perchè MyManager.Esempio lo trovo null ??? per quanto riguarda altri tipi, credo che valga per tutti i tipi di valore, invece la trovo valorizzata per quanto riguarda MyObject la trovo null eppure è impostato come statico...

--- Post modificato ---

Retifica: ho capito qual'è il problema, non centra niente il tipo che sia di valore o di riferimento il punto è che in realtà io utilizzo una classe statica con un generic (ho semplificato l'esempio ma il problema era dovuto proprio al tipo generico) quindi:

public static class MyManager<T>
{
public static MyObject Esempio;
public static void Init()
{
Esempio = new MyObject();
}
}

quindi se io chiamo per esempio il metodo Init in questo modo:

MyManager<String>.Init()

troverò il mio campo inizializzato solo facendo riferimento alla classe con lo stesso tipo generico e cioè:

MyManager<String>.Esempio ---- campo inizializzato
MyManager<Int>.Esempio ---- campo NON inizializzato

quindi attenzione se si lavora con i generics !!!

Gluck74 Profilo | Guru

in teoria questo accade se usi il tipo generics come dato memorizzato nella tua property
public void init() { esempio = new T(); }
viceversa non dovrebbe dare quel comportamento.
Potresti mandare tutto il codice preciso? così faccio un test. sono curioso di capire il problema
____________
http://glucolo.wordpress.com
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

andrestu Profilo | Expert

Ciao Gluck,
ti ho allegato un mini progetto di esempio per evidenziare il comportamento, come puoi vedere nella pagina WebForm1 posso vedere valorizzati solo s1 e s2 perchè in application_start ho eseguito i metodi
MyManager<int>.Init();
MyManager<object>.Init();
il quale al suo interno non utilizza il tipo generico, quindi benchè la classe MyManager sia statica è come se avessi due classi diverse una MyManager<int> e l'altra MyManager<object>

Andrea Restucci - Web Developer
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5