S novim .NET Frameworkom izašla je i nova verzija C# jezika. U verziji 3.0 uvode se sintaksna poboljšanja koja nam skraćuju vrijeme za programiranje i daju nam nove mogućnosti. Najvažnije novosti su:
1. Object Initializers
Omogućava nam kreiranje objekta uz inicijaliziranje atributa tog objekta iz jedne linije koda. Dosada smo imali dva načina kreiranja objekta. Prvi je da kreiramo objekt pa onda pojedinim atributima dajemo vrijednosti ili kreiramo specijalizirani konstruktor koji prime određene parametre. No za svaki pojedini slučaj trebali bi onda raditi nove konstruktore. Ovo se najbolje vidi na primjeru:
Stari način:
// Specialized constructor
Customer c =
new Customer("Price","Jeff");
// Follow-up property settings
Customer c = new Customer();
c.LastName = "Price";
c.FirstName = "Jeff";
Novi način:
Customer c =
new Customer() { LastName = "Price",
FirstName = "Jeff" };
2. Automatic properties
Drugo pobljošanje je vezano za propertye i tzv. gettere/settere. Kao što vidite iz donjih primjera sad puno brže možete deklarirati public property koji je vezan na private varijablu unutar klase
Stari način:
public class Customer
{
private int _id;
public int ID
{
get { return _id; }
set { _id = value; }
}
}
Novi način:
public class Customer
{
public int ID
{
get;
set;
}
}
3. Implicitly-typed Local Variables
U novom C#-u dolazi i novi tip podataka "var" koji je nedefinirani tip podataka (tj. implicitno definirani tip podataka). Da ne bude zabune C# je još uvijek strongly-typed jezik što znači da se još uvijek strogo vodi računa o tipovima podataka. Ove varijable se provjeravaju kod kompajliranja tako da ne možete dinamički mijenjati tip podatka u runtime-u kao što je to slučaj npr. kod Javascripta.
var i = 32; // i is System.Int32
var s = "hello"; // s is System.String
var c = new Customer(); // c is Customer
Console.Write(s.Length); // ok
Console.Write(i.Length); // compile-time error!
i = "world"; // compile-time error!
var x; // compile-time error!
4. Extension Methods
Meni najdraže poboljšanje. Omogućava vam da na postojeće klase u .NET Frameworku nadodate svoje metode koje su vam često potrebne, a koje nisu implementirane u samom frameworku. U donjem primjeru na .NET klasu String nadodana je metoda Reverse koja onda postaje sastavni dio String klase i pojavljuje se kao jedna od metoda koju nudi intelisense.
static class StringExtension
{
public static string Reverse(this string s) {
StringBuilder sb = new StringBuilder();
for (int i = s.Length - 1; i >= 0; i--)
{ sb.Append(s[i]); }
return sb.ToString();
}
}
...
string str = "hello";
Console.WriteLine(str.Reverse);
Izdvojio bih također i Lambda Expressions (ili lambda izrazi), funkcionalnost koja postoji u jezicima kao što su Lisp, ali opis ovog poboljšanja je nešto složeniji pa ćemo to ostaviti za neki drugi post.