– Framework Class Library – Base Class Library • Windows Presentation Foundation • Windows Communication Foundation • Windows Workflow Foundation • Windows CardSpace
ISO/IEC 23271) • Περιγράφει τον εκτελέσιμο κώδικα και το περιβάλλον εκτέλεσης • Αποτελείται από: – Common Type System – Μετα-δεδομένα – Common Language Specification – Virtual Execution System • Από Ιούλιο 2009: C# και CLI υπό Community Promise
cross- language integration, type safety και εκτέλεση κώδικα με υψηλή απόδοση • Η παροχή ενός αντικειμενοστραφούς μοντέλου, που υποστηρίζει την πλήρη υλοποίηση από διάφορες γλώσσες προγραμματισμού • Ο προσδιορισμός κανόνων ώστε οι γλώσσες να είναι interoperable
To CLS βοηθάει στη διαλειτουργικότητα γλωσσών με το να προσδιορίζει χαρακτηριστικά που είναι κοινά σε κάθε γλώσσα που απευθύνεται το CLR • Πχ – To UInt32 δεν είναι CLSCompliant – Η C# case sensitive, Visual Basic όχι
y; // private fields public Point (int x, int y) // constructor { this.x = x; this.y = y; } public int X // property { get {return x;} set {x = value;} } public int Y { get {return y;} set {y = value;} } }
κλάση του .NET, System.Array • Δηλώνονται με τύπο και μορφή, αλλά χωρίς όρια – int[] SingleDim; – int[,] TwoDim; – int [][] Jagged; • Δημιουργία – SingleDim = new int[20]; – TwoDim = new int[,]{{1,2,3},{4,5,6}}; – Jagged = new int[1][]; – Jagged[0] = new int[]{1,2,3};
Υλοποίηση read-only μελών (παραλείποντας το set) – Επικύρωση κατά την ανάθεση – Παράγωγες ή σύνθετες τιμές – Έκθεση τιμών σε interfaces string Name { get { return name; } set { name = value; } }
get accessor που επιτρέπει την χρήση foreach στην κλάση ή το struct χωρίς να χρειάζεται να υλοποιηθεί το interface IEnumerable • Είναι ένα κομμάτι κώδικα που επιτρέπει ταξινομημένη σειρά τιμών ίδιου τύπου • Χρησιμοποιεί το yield return
Ισχυροί τύποι (αντίο στο type-casting και στα σφάλματα) • Η δήλωση δημιουργεί μία typed method signature delegate void Clicked(Element e, Point p); • Ο πραγματικός αντιπρόσωπος είναι ένα στιγμιότυπο αυτού του τύπου και μπορεί να γίνει με αρχικοποίηση είτε με Named Method είτε με Anonymous • Το όρισμα περνιέται στον constructor του αντιπροσώπου
CLR var v = new { Amount = 108, Message = "Hello" }; var productQuery = from prod in products select new { prod.Color, prod.Price }; foreach (var v in productQuery) { Console.WriteLine("Color={0}, Price={1}", v.Color, v.Price); }
• Σαν anonymous method αλλά μικρότερο • Χρησιμοποιεί τον lambda operator => που διαβάζεται goes to δηλαδή «συνεπάγεται» • Αριστερά έχουμε παραμέτρους εισόδου και δεξιά την έκφραση ή το κομμάτι κώδικα. • Shorthands – Parameter type inference – Brace removal (single expression/statement) – Bracket removal (single parameter) • Expression Trees
Μία μέθοδος στην οποία μπορεί να δείξει η από πάνω μεταβλητή static public int DoubleIt(int x) { return x * 2; } // Δημιουργία στιγμιοτύπου ChangeInt myDelegate = new ChangeInt(DelegateSample.DoubleIt); Console.WriteLine("{0}", myDelegate(5));
Enumerable.GroupBy( Enumerable.ThenByDescending( Enumerable.OrderBy( Enumerable.Where(employees, p => p.Salary > 33000m), p => p.Name), p => p.StartDate), p => p.Department);
Enumerable.ThenByDescending( Enumerable.OrderBy( Enumerable.Where(employees, new Func<Employee,bool> (BigSalary), new Func<Employee, string> (NameFunc), new Func<Employee, DateTime> (StartFunc), new Func<Employee, Department> (DeptFunc));