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

this

Cuvantul cheie this este folosit pentru a referi instanta curenta a clasei pentru metoda apelata. El poate accesa membri din constructor, metode de instanta sau proprietati ale obiectului.

Un scenariu in care se foloseste este eliminarea ambiguitatii unei metode sau a unui camp (evitarea conflictelor de nume).

    /// <summary>
    /// agent class
    /// </summary>
    class Agent
    {
       public string name;
       public int code;

        public Agent(string name, int code)
        {
            //expressing programmer's intent at the level of the source code.
            //"this" may be inferred by compiler and not required
            this.name = name;
            this.code = code;
        }
    }

In cazul in care nu se folosim this nu vom primi eroare la compilare, nici macar un warning. Folosirea lui este utila pentru a exprima intentia programatorului si de a face diferenta intre parametrul name si campul name.

This poate fi folosit in contextul unui constructor. El poate supraincarca constructorul pentru a evita duplicarea codului.
Clasa Agent are doi construcori publici. Primul este fara parametru si il apeleaza pe al doilea, folosind this.

    /// <summary>
    /// class Agent
    /// </summary>
    class Agent
    {
        public int code;
        public string name;

        /// <summary>
        /// "this" in constructor initializer
        /// </summary>
        public Agent() : this(-1," ")
        {

        }

        /// <summary>
        /// explicit constructor
        /// </summary>
        /// <param name="code"></param>
        /// <param name="name"></param>
        public Agent(int code, string name)
        {
            this.code = code;
            this.name = name;
        }
    }

Pentru teste, instantiem clasele:

            //test constructors
            //-1 " "
            Agent a = new Agent();
            Console.WriteLine("{0} {1}", a.code, a.name);
            //1 x    
            Agent a2 = new Agent(1,"x");
            Console.WriteLine("{0} {1}", a2.code, a2.name);

Cu thisse poate transmite ca parametru un obiect.
Cream o clasa cu o metoda cu un parametru de tip Agent.

    static class Printing
    {
        public static void GetAgent(Agent agt)
        { 
            //
        }
    }

Metoda se poate apela din interiorul clasei Agent astfel:

            Printing.GetAgent(this);

This nu se aplica in interiorul unei metode statice sau a unei proprietati statice.

        static void ComputeWage()
        {
            //error
            this.Code;
            //error
            string s = this.name;
        }

This se mai foloseste la declararea unui index sau la crearea metodelor extinse.

This este un cuvant cheie in C# pe care eu il gasesc foarte util prin folosirea lui in contextul unui constructor pentru a avea cod comun intre constructori si a permite supraincarcarea acestora, prin rolul lui in construirea indecsilor si prin faptul ca ajuta la o mai buna citire a codului.

Category: Uncategorized

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

*