Najvažnije uvedene stvari su:
1) Object initializers
2) anonimni tipovi
3) implicitno tipiziranje lokalne varijable
4) implicitno tipiziranje niza
5) Extension methods
6) Lambda izrazi
7) Expression trees

Query expressions
Tačka 1.: object initializers
Object initializers su pojednostavljeni konstruktori sa geter i seter metodama. Rezultat je kraći i čitljivi kod:
Kod:
// deklarisanje
public class Point {
int x, y;
public int X { get { return x; } set { x = value; } }
public int Y { get { return y; } set { y = value; } }
}
public class Rectangle {
Point p1, p2;
public Point P1 { get { return p1; } set { p1 = value; } }
public Point P2 { get { return p2; } set { p2 = value; } }
}
...
// instanciranje
var a = new Point { X = 0, Y = 1 };
var r = new Rectangle {
P1 = new Point { X = 0, Y = 1 },
P2 = new Point { X = 2, Y = 3 }
};
Tačka 2: anonimni tipovi
Anonimni tipovi su tuple tipa. Programer im ne daje ime, već to radi kompajler. Automatski vraćaju instacu jednog objekta.
Kod:
new { p1 = e1 , p2 = e2 , … pn = en }
var p1 = new { Name = "Lawnmower", Price = 495.00 };
var p2 = new { Name = "Shovel", Price = 26.95 };
p1 = p2;
Tačke 3. i 4. implicitno tipiziranje
Uvedeno je implicitno tipiziranje lokalne varijable i niza:
Kod:
// varijable
var i = 5;
var s = "Hello";
var d = 1.0;
var orders = new Dictionary<int,Order>();
// niza
var numbers = new int[] {1, 2, 3};
var c = new[] { "hello", null, "world" };
Ovde je očigledan uticaj JavaScript-a, mada je Python to bolje uradio. Verovatno je bilo lakše napisati u JS jer je sada u deklaraciji na mesto tipa varijable uvedeno generički tip "var" što mu dođe kao void u C-u. Izgleda da su jezici sa imenom "java" u sebi sudbina C#
.gif)
Točke 6. i 7.: lambda izrazi i Expression trees
Lambda izrazi se koriste na mestu u kojem se pojavljuju anonimne metode C#-a 2.0 (gde se očekuju delegati). Još jedan dodatak iz funkcionalnog programiranja. Postoji i u Pythonu ali se slabo koristi:
Kod:
x => x + 1 // Implicitly typed, expression body
x => { return x + 1; } // Implicitly typed, statement body
(int x) => x + 1 // Explicitly typed, expression body
(int x) => { return x + 1; } // Explicitly typed, statement body
(x, y) => x * y// Multiple parameters
() => Console.WriteLine() // No parameters
Expression trees koriste lambda izraze kao programski kod tj. omogućavaju jednostavnu izgradnju koda tokom run-timea:
Kod:
Func<int,int> f = x => x + 1; // Code
Expression<Func<int,int>> e = x => x + 1; // Data
Tačka 8. Query expressions
Kod:
from c in customers
where c.City == "London"
from o in c.Orders
where o.OrderDate.Year == 2005
select new { c.Name, o.OrderID, o.Total }
Malo su mi ovde izvrnuli SQL. Ovo liči na Python kod, jedino je dobro što se ovo u C# može primeniti kako na bazu tako i na iteratore, a u Pythonu samo na iteratore i generatore.
Sve u svemu puno novina. Koliko su korisne ostaje pitanje. C# je ionako komplikovan jezik a sa ovim će biti još teži za shvatanje. Kao da se žele dodvoriti programerima svih ukusa. Prvo su se ulizivali C++ašima pa su u jezik uveli mnoge stvari za koje je java mislila da su anahrone (za neke se i predomislila), sada se uvlače LISP-ovcima, Python-ašima... Samo da ne preteraju kao kada su stvaraoci C++ preterali u kompatibilnosti sa C-om, pa su stvorili ubedljivo najgori programski jezik (spram vremena nastajanja).
Mnoge od ovih ideja su već testirane u drugim jezicima, čak jezicima za 2 najpopularnije VM: JVM i .NET. Pogledajte npr.
Cω, nadogradnju na C#. Pogledajte
pregled jezika Cω.