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

Object initializer

Acest articol este dedicat unei functionalitati din versiunea 3.0 a limbajului C# si anume, object initializer. Vom examina modul cum se initializau obiectele pana la aparitia acestei caracteristici si cat de utila este in programare.

Construim clasa Report.

    /// <summary>
    /// class Report
    /// </summary>
    public class Report 
    {
        /// <summary>
        /// report's title
        /// </summary>
        public string Title { get; set; }
        /// <summary>
        /// report's date
        /// </summary>
        public DateTime Date { get; set; }
        /// <summary>
        /// report's number
        /// </summary>
        public int Number { get; set; }

        /// <summary>
        /// default constructor
        /// </summary>
        public Report()
        {
            
        }

        /// <summary>
        /// constructor with parameters for class properties
        /// </summary>
        public Report(string title, DateTime date, int number)
        {
            Title = title;
            Date = date;
            Number = number;
        }
    }

Urmatoarele modalitati de scriere sunt des intalnite:

            //instantiate the object
            Report report = new Report();
            //set properties
            report.Title = "Articles";
            report.Date = DateTime.Now;
            report.Number = 123;

            //--------

            Report report = new Report("Articles", DateTime.Now, 124);

In C# 3.0 apare notiunea de object initalizer. Aceasta permite constructia si initializarea intr-un mod usor si contine valorile care vor fi atribuite membrilor noului obiect creat.

            //use of object initializer
            var report = new Report
                             {
                                 Title = "Articles", 
                                 Date = DateTime.Now,
                                 Number = 123
                             };

Expresia de mai sus este executata in doi pasi: invocarea contructorului (crearea obiectului) si initializarea membrilor cu valorile specificate.

In cazul in care constructorul implicit este privat, object initializer va genera eroare.
‘ObjectInitializer.Report.Report()’ is inaccessible due to its protection level.

Tipurile anonime trebuie declarate cu ajutorul unui object initializer, pentru ca doar acesta le poate instantia.

            var car = new { Year = 2011, Color = "Yellow" };

Campurile care nu sunt specificate vor avea valori implicite.

In cadrul colectiilor se pot folosi mai multe elemente de initializare, fara a mai fi nevoie de apelul metodei Add (compilatorul va face acest lucru).

            List<Report> reportList = new List<Report>()
                                        {
                                            new Report { Date = DateTime.Now, Number = 124, Title = "Agents" },
                                            new Report { Date = DateTime.Now, Number = 125, Title = "Warehouses" } 
                                        };

In cazul in care programatorul scrie propria colectie, aceasta trebuie sa implementeze interfata ICollection.

Object initializer furnizeaza o sintaxa noua, simpla, care combina crearea obiectuui si initializarea lui intr-un singur pas. Chiar daca acelasi lucru este scris cu mai putin cod, in ceea ce priveste performanta se poate spune ca diferenta este minora (nu se mai aloca spatiu pentru variabila locala), instructiunile IL fiind aceleasi.

Category: Uncategorized
  • zeltera says:

    Foarte utila aceasta facilitate.

    May 26, 2011 at 3:13 pm

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

*