C# 3.0: Automatic Properties, Object Initializers og Collection Initializers

C# 3.0: Automatic Properties, Object Initializers og Collection Initializers

  • Comments 1

Jeg vil bruge lidt båndbredde på at beskrive nogle af de nye sprogkonstruktioner i C# 3.0, fordi jeg er sikker på, at jeg kommer til at holde rigtig mange foredrag de næste 4-6 måneder om emnet;-)

Nogle af de bekvemme ting der kommer med C# 3.0 er Automatic Properties, Object Initializers og Collection Initializers. Det vil uden tvivl spare dig nogle linjer kode – og jeg syntes egentlig at læsbarheden af din kode bevares.

Automatic Properties
Man kommer meget hurtigt til at skrive mange linjer koder, bare for at lave dataklasser:

class Programmer
{
    private string firstName;
    public string FirstName
    {
        get { return this.firstName; }
        set { this.firstName = value; }
    }
}

Her vil du kunne spare lidt krudt med C# 3.0 og skrive ovenstående + et par ekstra properties på følgende vis:

class
Programmer
{
    public string FirstName{ get; set; }
    public string LastName{ get; set; }
    public int Experience{ get; set; }
}

I Visual Studio 2005 og 2008 er du dog lige godt hjulpet, da din du kan bruge den code snippet der er til properties (skriv "prop" og tryk tab to gange).

IL kompatibiliteten bevares, hvis du senere skulle bestemme dig for at modificere enten get eller set, det vil sige signaturen vil stadig være den samme.

Object Initializers
Basalt set, så får du med Object Initializers en meget større fleksibilitet til, som begrebet siger, at initialisere objekter. F.eks

Programmer p1 = new Programmer {
FirstName = "Henrik",
LastName = "Westergaard",
Experience=10 };

Ovenstående kræver default konstruktor. Du sparer dig enten at kalde/lave en konstruktor med parametrene defineret, eller også efterfølgende at sætte hver property en af gangen. Hvis nu Programmer klassen ikke har en default konstruktor, men f.eks tager FirstName som parameter, så vil du kunne gøre følgende:

Programmer p2 = new Programmer("Henrik") {Experience=10};

Collection Initializers
Selvfølgelig kommer det også til collections. Nu er du fri for at skrive:

List<Programmer> ps = new List<Programmer>();
ps.Add(p1);
ps.Add(p2);

Men du kan i stedet for skrive:
List<Programmer> ps = new List<Programmer>{p1,p2};

Ikke raketvidenskab, men alligevel nogle meget rare sprogudvidelser.

Jeg vil anbefale dig at læse ScottGu's blogpost om emnet.
Derudover skal du selvfølgelig have fat i en version af Visual Studio 2008. VS 2008 kan installeres ved siden af VS 2005.