Implementing all day

This is my personal coding blog

Så hvad er der i C# 6? Egenskabsinitialicering og primærkonstruktør

Jeg har set lidt på, hvad der venter os i den kommende opdatering af c# - version 6.

Ind til nu, har egenskabsinitialicering foregået nogenlunde således:

public class Person
{
	public Person(string navn)
	{
		this.Navn = navn;
		this._id = Guid.NewGuid();
	}

	public string Navn { get; set; } 
	
	private Guid id;
	public Guid ID { get{ return id; } }
}

Man er nød til at have et backing-felt, for at kunne tildele readonly egenskaben id med en værdi.

I C# 6 kan man nu initialicerer egenskaben direkte hvor egenskaben erklæres i koden.

public class Person
{
	public string Navn { get; set; } = "Jesper"; 
	public Guid ID { get; } = Guid.NewGuid();
}

Læg mærke til at vi med denne syntaks, ligeledes kan udelade setteren, og reelt gøre egenskaben uforanderlig. For at opnå dette tidligere, måtte man, som sagt, ty til at implementerer backing-felt. Det vil gøre klasse-koden kortere, mere kompakt og samle definition og initialisering i koden.

Denne syntaks leder os så hurtigt videre, til det lidt større koncept – primær konstruktøren. En primær konstruktør, gør det muligt for os at definerer en konstruktør for en klasse, og tilgå parametrene i resten af klassekroppen:

public class Person(string navn, int alder)
{    
	public string Navn { get; } = navn;    
	public int Alder { get; } = alder;
} 

Det nye består i at man angiver parametre i parentes efter klasse-navnet. Alle andre konstruktører skal så kalde ind til primærkonstruktøren, via this() syntaksen. Kompileren vil rejse fejl, hvis man forsøger sig uden kald til primærkonstruktøren. Det sker for at garanterer at primærkonstruktør-parametrene er til rådighed i hele klassekroppen.

public class Person(string navn, int alder)
{
    public Person(string navn) 
		: this(navn, 0){}    
	
	public string Navn { get; } = navn;    
	public int Alder { get; } = alder;
} 

Igen må man sige vi får en yderst kompakt og funktions orienteret kode, men hvad så med validering af input til primær konstruktøren. Det gøres nemt ved at tilføje en separat kodeblok i klasse kroppen:

public class Person(string navn, int alder)
{    
	{
         if(navn == null) throw new Exception("Navn skal angives");    
	}    
	
	public string Navn { get; } = navn; 
}

Man kan med sidstnævnte primærkonstruktør blok, nok argumenterer for hvor meget mere simpel syntaksen bliver.
Alt I alt et sæt features, der gør arbejdet med til at skrive kode kortere. Om man synes om syntaksen, og mener at det bliver mere overskueligt, er vel op til den enkelte udviklers temperament. Jeg selv elsker jo korte, eksplicitte sætninger, så mon ikke jeg tager den til mig ret hurtigt.

Code on…