Saturday, April 23, 2011

Automatic Properties, Object Initializers and Collection Initializers


Introduction
In c# 3.0 and later versions many new features are available but some people are not aware of them. There are some new features explained below In C# 3.0 and later.

Auto-implemented properties:

Auto-implemented properties make property-declaration more concise when no additional logic is required in the property accessors. They also enable client code to create objects. When you declare a property as shown in the following example, the compiler creates a private, anonymous backing field that can only be accessed through the property's get and set accessors.

Let’s see the old writing method.

  public class Person
  {
    private string _firstName;
    private string _lastName;
    private int _age;

    public string FirstName
    {
      get
      { return _firstName; }
      set
      { _firstName = value; }
    }

    public string LastName
    {
      get
      { return _lastName; }
      set
      { _lastName = value; }
    }

    public int Age
    {
      get
      { return _age; }
      set
      { _age = value; }
    }
  }
    
 Now we can see the enhanced implementation.

  public class Person
  {
    public string FirstName
    {
      get;
      set;
    }

    public string LastName
    {
      get;
      set;
    }

    public int Age
    {
      get;
      set;
    }
  }

Note: This way is possible only when you don’t want to write any logical implementation in the getter/setter part. If you want to write implementation then you must go through the old method.

Object & Collection Initializers:

Object/Collection initializers, let you assign values to any accessible fields or properties of an object at creation time without having to explicitly invoke a constructor. 

Considering above example now we initialize of an object with the old method.

  Person person1 = new Person();

  person1.FirstName = "Munavvar";
  person1.LastName = "Husein";
  person1.Age = 25;

Now in place of this we can write it like,

  Person person1 = new Person
  {
    FirstName = "Munavvar",
    LastName = "Husein",
    Age = 25
  };

In the case of Collections same thing would be done as under. Considering above examle to make a list with old method.

  List<Person> lstPerson = new List<Person>();

  Person persons = new Person();
  persons.FirstName = "Munavvar";
  persons.LastName = "Husein";
  persons.Age = 25;
  lstPerson.Add(persons);

  persons = new Person();
  persons.FirstName = "Rikin";
  persons.LastName = "Patel";
  persons.Age = 26;

  lstPerson.Add(persons);

Now in place of this we can write it like,

  List<Person> lstPerson = new List<Person>
  {
    new Person
    {
      FirstName = "Munavvar",
      LastName = "Husein",
      Age = 25
    },
    new Person
    {
      FirstName = "Rikin",
      LastName = "Patel",
      Age = 26
      }
    };

Conclusion:
  As per enhanced feature we can just reduse the burdon of typing extra statements with no loss of performance.

No comments:

Post a Comment