RicH and FamouS

       Home         Glosar IT                                                                                                                                                                                                              SUBSCRIBE NOW!
        

06.04.2009

Clase statice in ASP.NET

Mare atentie cu folosirea claselor statice in ASP.NET, datorita caracteristicilor lor speciale. Dupa cum stiti o clasa statica cu metode statice permite folosirea ei fara a fi instantiata, direct apelind metodele sau proprietatile ei cu numele clasei.

Exemplu (adaugati de exemplu StaticsClass.cs in App_Code al unui proiect):

Cod:
public static class StaticClass
{
private static int _n = 0;
public static void init(int i) { _n = i; }
public static string get() { return "value: " + _n; }
}

Problema consta in faptul ca aceste proprietati si metode statice sint unice pt. toate instantele clasei, ce pot modifica toate aceleasi proprietati unice.

Pt. acest caz, apelul functiei StaticClass.init() va pune o valoare in _n, ce apoi poate fi modificata de alta utilizare a clasei. Intre apelul init() si get() nu exista nici o garantie ca variabila statica _n nu a fost cumva modificata.

Un exemplu de folosire a clasei in 2 fisiere ASP.NET:

Static1.aspx:

Cod:
<form id="form1" runat="server">
<div>
<%
StaticClass.init(1);
System.Threading.Thread.Sleep(20000);
Response.Write(StaticClass.get());
%>
</div>
</form>

Static2.aspx:

Cod:
<form id="form1" runat="server">
<div>
<%
StaticClass.init(2);
//System.Threading.Thread.Sleep(10000);
Response.Write(StaticClass.get());
%>
</div>
</form>

Daca o sa incarcati static1.aspx iar apoi imediat static2.aspx (inainte de expirarea celor 20 se sec. de asteptare) o sa vedeti ca ambele pagini afiseaza aceeasi valoare (2).

Se intimpla asta pt. ca desi valoarea _n pt. prima pagina a fost initializata cu 1, vine a 2 pagina si o modifica la 2, fiind vorba de o variabila unica, statica, asociata clasei. Iar valoarea ramine 2, modificata.

Asadar mare atentie cu folosirea claselor cu metode si proprietati statice pt. ca acestea pot cauza probleme sau o 'gituire' a aplicatiei, pt. cazul in care metodele ei dureaza mai mult (toate acele apeluri se vor executa secvential, unul dupa altul).

Exista cazuri cind clasele sau metodele statice pot fi un avantaj, in special pt. apeluri scurte de functii ce sint executate intr-un singur pas ('stateless'). In acest caz este mai simplu doar sa apelezi metodele clasei fara sa o mai instantiezi.

Odata inteles dedesubturile decideti singuri cind acestea ajuta sau incurca.

    Blog din Moldova    FastCounter 

 
Copyright © 2008-2010 Foster1. All rights reserved.