Risipa de key_press | Programare

Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Risipa de key_press | Programare - Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Despre cuvantul cheie static

Exista situatii in care este nevoie sa definim un membru in cadrul unei clase care sa fie utilizat fara a crea o instanta pentru clasa respectiva. In mod normal, ca sa accesam un membru, cream mai intai o instanta a clasei. Este totusi posibil sa cream un membru care sa fie de sine statator, fara a referi o anumita instanta, fara a referi un anumit obiect.

Campurile sau metodele care folosesc o instanta se numesc membri de instanta. Membri care nu opereaza cu instanta unui tip se numesc membri statici.

Declararea membrului (variabila sau metoda) static se face cu ajutorul cuvantului cheie static.

    /// <summary>
    /// Clasa Agent
    /// </summary>
    public class Agent
    {
        //membru static 
        public static int Code;
        //membru de instanta
        public string Name { get; set; }
        public static decimal Wage { get; set; }
        public decimal Taxes { get; set; }
   }


            //pentru folosirea unui membru de instanta
            //este nevoie de crearea unei instante, a unui obiect
            Agent a = new Agent();
            a.Name = "Marius";

In apelarea membrului static se precizeaza numele clasei care il contine, urmat de operatorul .(punct), fara a fi necesar crearea unei instante.

            //apelul unui membru static
            //nu este necesara crearea unei instante pentru clasa Agent
            Agent.Code = 100;

Cel mai intalnit exemplu de membru static este meotda Main() care va fi apelata de sistemul de operara la inceputul programului. De asemenea, WriteLine sau ReadLine din clasa Console sunt membri statici.

Variabilele statice pot fi privite ca variabile globale. Cand se creeaza o instanta pentru o clasa cu un membru static, valoarea lui nu este copiata. De exemplu, alocarea memoriei pentru campul non-static Wage din clasa Agent se va face pentru fiecare obiect creat. In schimb, valoarea din campul static Taxes va fi partajata de toate instantele tipului de clasa.

Variabilele de tip static sunt initializate la incarcarea clasei in memorie (0 pentru tipurile numerice, null pentru tipurile referinta, false pentru bool).

Metodele static nu dispun de referinta this.

Metodele statice nu pot apela metodele “obisnuite” din aceesi clasa, nici variabile de instanta. Acest lucru este posibil doar prin intermediul unui obiect din clasa respectiva.

        //este gresita folosirea unui membru de instanta in cadrul unui membru static
        public static decimal CalculateWage()
        { 
            return Wage * Taxes;
        }

(An object reference is required for the non-static field, method, or property.)

O constanta este implicit statica, deci cuvantul cheie static in declararea acesteia va genera o eroare de compilare: The constant ‘StaticExample.Agent.SecretCode’ cannot be marked static.

Clasele statice

Daca o clasa este declara statica, atunci toti membri ei vor fi statici. Altfel, vom primi eroare la compilare: cannot declare instance members in a static class.

    static public class Constants
    {
        public static int Length { get; set; }

        public static int GetValue()
        {
            return 100;
        }
    }

O clasa statica nu poate fi mostenita: cannot derive from static class. Eroarea apare in momentul compilarii.

Cele mai folosite clasa statice sunt Console si Math.

In construirea claselor din C#, este foarte important de stiut care membri trebuie declarati statici si care nu. Deoarece nu exista reguli clare, se recomanda folosirea membrilor statici atunci cand nu depindem de contextul unui obiect sau cand e nevoie ca un camp sa fie folosit de toate obiectele de tipului respectiv.

Articolul viitor va face referire la constructorii statici.

Category: Uncategorized

Your email address will not be published. Required fields are marked *

*