Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introduction to .NET and C# (in Greek)

Introduction to .NET and C# (in Greek)

An invited talk given at Athens University of Economics and Business for the Software Engineering class of MSc, Information Systems.

Aggelos Biboudis

January 23, 2010
Tweet

More Decks by Aggelos Biboudis

Other Decks in Programming

Transcript

  1. Εισαγωγή στο .ΝΕΤ Framework και στη C# Μέθοδοι Ανάπτυξης και

    Αρχιτεκτονικές Συστημάτων ΠΜΣ Πληροφοριακά Συστήματα, ΟΠΑ Άγγελος Μπιμπούδης BSc, MSc PhD Candidate, University of Athens Microsoft Student Partner, Microsoft Hellas Software Developer, Nessos S.A.
  2. Agenda • Τι είναι το .ΝΕΤ • Γνωριμία με Visual

    Studio IDE • Παρουσίαση γλώσσας C# • Ομοιότητες/Διαφορές με Java
  3. Τι είναι το .NET • Framework – Common Language Runtime

    – Framework Class Library – Base Class Library • Windows Presentation Foundation • Windows Communication Foundation • Windows Workflow Foundation • Windows CardSpace
  4. Common Language Infrastructure • Είναι το ανοικτό πρότυπο (ECMA-335 και

    ISO/IEC 23271) • Περιγράφει τον εκτελέσιμο κώδικα και το περιβάλλον εκτέλεσης • Αποτελείται από: – Common Type System – Μετα-δεδομένα – Common Language Specification – Virtual Execution System • Από Ιούλιο 2009: C# και CLI υπό Community Promise
  5. Γλώσσες που συνάδουν με το πρότυπο • Ada • APL

    • Basic (Visual Basic) • C# • C • C++ • Java Language • COBOL • Component Pascal (Queensland Univ of Tech) • ECMAScript (JScript) • Eiffel (Monash University) • Haskell (Utrecht University) • lcc (MS Research Redmond) • Mondrian (Utrecht) • ML (MS Research Cambridge) • Mercury (Melbourne U.) • Oberon (Zurich University) • Oz (Univ of Saarlandes) • Perl • Python • Scheme (Northwestern U.) • SmallTalk
  6. Common Type System • Να υπάρχει ένα framework που υποστηρίζει

    cross- language integration, type safety και εκτέλεση κώδικα με υψηλή απόδοση • Η παροχή ενός αντικειμενοστραφούς μοντέλου, που υποστηρίζει την πλήρη υλοποίηση από διάφορες γλώσσες προγραμματισμού • Ο προσδιορισμός κανόνων ώστε οι γλώσσες να είναι interoperable
  7. Common Language Specification • Το CLS υποσύνολο του CTS •

    To CLS βοηθάει στη διαλειτουργικότητα γλωσσών με το να προσδιορίζει χαρακτηριστικά που είναι κοινά σε κάθε γλώσσα που απευθύνεται το CLR • Πχ – To UInt32 δεν είναι CLSCompliant – Η C# case sensitive, Visual Basic όχι
  8. Common Language Runtime • Just-in-time Compilation • Memory management •

    Thread management • Exception handling • Garbage collection • Security
  9. Οφέλη .ΝΕΤ • Αυτόματη διαχείριση πόρων • Απλοποίηση προγραμματισμού •

    Multiplatform προσέγγιση • Ασφαλές σύστημα τύπων δεδομένων • Ιδανικό μοντέλο ασφάλειας • Κοινό περιβάλλον ανάπτυξης επιτρέποντας πολυγλωσσικό debugging • Δομές για επαναχρησιμοποίηση κώδικα
  10. C# 101 • Τα πάντα είναι objects και κληρονομούν το

    System.Object • Διάκριση ανάμεσα σε τύπους τιμής και αναφοράς • Value Types: primitives, enums, structs • Reference Types: interfaces, classes, arrays
  11. Value vs Reference Types struct Point { private int x,

    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;} } }
  12. Παράδειγμα • Point p1 = new Point(); Form f1 =

    new Form(); • Form f1; f1 = new Form(); • Point p2 = p1; Form f2 = f1;
  13. Παράδειγμα • Point myPoint = new Point (0, 0); Form

    myForm = new Form(); • Test (myPoint, myForm); • void Test (Point p, Form f) { p.X = 100; // Καμία επίδραση στο myPoint f.Text = "Hello, World!"; f = null; // Καμία επίδραση στο myForm }
  14. Παράδειγμα • Point myPoint = new Point (0, 0); Form

    myForm = new Form(); • Test (ref myPoint, ref myForm); • void Test (ref Point p, ref Form f) { p.X = 100; f.Text = “Hello, World!”; f = null; }
  15. Δηλώσεις • Όπως και η C – if (<bool expr>)

    { ... } else { ... }; – switch(<var>) { case <const>: ...; }; – while (<bool expr>) { ... }; – for (<init>;<bool test>;<modify>) { ... }; – do { ... } while (<bool expr>); • Όχι σαν την C – lock(<object>){ ... }; – checked {...}; unchecked { ...};
  16. Πίνακες (Arrays) • Zero based, type bound • Βασίζονται στην

    κλάση του .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};
  17. Κλάσεις • Υλοποίηση κώδικα και δεδομένων • Μπορεί μία κλάση

    να υλοποιεί interfaces • Μπορεί να κληρονομεί από μία βασική κλάση (base class) • Περιέχουν – Πεδία (fields) – Ιδιότητες (properties – get/set) – Μέθοδοι (Methods) – Events, indexers, delegates,…
  18. Πρόσβαση • Ομοιότητες με C++ – Public – Protected –

    Private • Επεκτάσεις – Sealed – Internal – Protected internal
  19. Ιδιότητες • Ευκολία υλοποίησης μεθόδων • Χρήση properties για –

    Υλοποίηση read-only μελών (παραλείποντας το set) – Επικύρωση κατά την ανάθεση – Παράγωγες ή σύνθετες τιμές – Έκθεση τιμών σε interfaces string Name { get { return name; } set { name = value; } }
  20. Iterators • Εισήχθησαν στην C# 2.0 • Είναι μία μέθοδος,

    get accessor που επιτρέπει την χρήση foreach στην κλάση ή το struct χωρίς να χρειάζεται να υλοποιηθεί το interface IEnumerable • Είναι ένα κομμάτι κώδικα που επιτρέπει ταξινομημένη σειρά τιμών ίδιου τύπου • Χρησιμοποιεί το yield return
  21. Παράδειγμα public class SampleCollection { public int[] items; public SampleCollection()

    { items = new int[5] { 5, 4, 7, 9, 3 }; } public System.Collections.IEnumerable BuildCollection() { for (int i = 0; i < items.Length; i++) { yield return items[i]; } } } class MainClass { static void Main() { SampleCollection col = new SampleCollection(); // Display the collection items: System.Console.WriteLine("Values in the collection are:"); foreach (int i in col.BuildCollection()) { System.Console.Write(i + " "); } } }
  22. Delegates • Κάτι σαν τους δείκτες σε συναρτήσεις (C/C++) •

    Ισχυροί τύποι (αντίο στο type-casting και στα σφάλματα) • Η δήλωση δημιουργεί μία typed method signature delegate void Clicked(Element e, Point p); • Ο πραγματικός αντιπρόσωπος είναι ένα στιγμιότυπο αυτού του τύπου και μπορεί να γίνει με αρχικοποίηση είτε με Named Method είτε με Anonymous • Το όρισμα περνιέται στον constructor του αντιπροσώπου
  23. Named methods • delegate void Del(int x); • void DoWork(int

    k) { /* ... */ } • Del d = obj.DoWork;
  24. C# 3.0 • Μεγαλύτερη καινοτομία: επερωτήσεις στα δεδομένα var query

    = from p in employees where p.Salary > 33000m orderby p.Name, p.StartDate descending group p by p.Department;
  25. Anonymous types • Σαν ένας κανονικός τύπος που ζει στο

    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); }
  26. Extension methods • Επιτρέπεται να προστεθούν μέθοδοι σε υπάρχοντες τύπους

    χωρίς να δημιουργούμε έναν νέο derived τύπο • Καλούνται πολύ εύκολα (just static methods underneath) • Method chaining
  27. Παράδειγμα • string x = "some string value"; string y

    = Utility.Reverse(x); • string x = "some string value"; string y = x.Reverse(); public static class Utility { public static string Reverse(this string input) { char[] chars = input.ToCharArray(); Array.Reverse(chars); return new String(chars); } }
  28. Lambda (λ) expressions • Το καλύτερο feature της C# 3.0

    • Σαν anonymous method αλλά μικρότερο • Χρησιμοποιεί τον lambda operator => που διαβάζεται goes to δηλαδή «συνεπάγεται» • Αριστερά έχουμε παραμέτρους εισόδου και δεξιά την έκφραση ή το κομμάτι κώδικα. • Shorthands – Parameter type inference – Brace removal (single expression/statement) – Bracket removal (single parameter) • Expression Trees
  29. Παράδειγμα int[] source = new[] { 3, 8, 4, 6,

    1, 7, 9, 2, 4, 8 }; foreach (int i in source.Where(x => x > 5)) Console.WriteLine(i);
  30. Παράδειγμα // Δήλωση delegate public delegate int ChangeInt(int x); //

    Μία μέθοδος στην οποία μπορεί να δείξει η από πάνω μεταβλητή static public int DoubleIt(int x) { return x * 2; } // Δημιουργία στιγμιοτύπου ChangeInt myDelegate = new ChangeInt(DelegateSample.DoubleIt); Console.WriteLine("{0}", myDelegate(5));
  31. LINQ Χαρακτηριστικά • Δυνατότητα επερωτήσεων μέσα στη γλώσσα • Περιέχει

    Standard Query Operations – Select – Where – Join – Take/Skip – Group By • Providers Erik Meijer
  32. Λίγο ακόμα με compiler internals για Linq • Μετάφραση σε

    κανονική C# • Νωρίς νωρίς στη μεταγλώττιση
  33. Επεκταμένη μορφή 1 • Query expression σε κανονική C#: var

    query = employees .Where(p => p.Salary > 33000m) .OrderBy(p => p.Name) .ThenByDescending(p => p.StartDate) .GroupBy(p => p.Department);
  34. Επεκταμένη μορφή 2 • Αφαίρεση της έμμεσης απόδοσης τύπου IEnumerable<Employee>

    query = employees .Where(p => p.Salary > 33000m) .OrderBy(p => p.Name) .ThenByDescending(p => p.StartDate) .GroupBy(p => p.Department);
  35. Επεκταμένη μορφή 3 • Αφαίρεση Extension Methods IEnumerable<Employee> query =

    Enumerable.GroupBy( Enumerable.ThenByDescending( Enumerable.OrderBy( Enumerable.Where(employees, p => p.Salary > 33000m), p => p.Name), p => p.StartDate), p => p.Department);
  36. Επεκταμένη μορφή 4 • Αφαίρεση lambdas IEnumerable<Employee> query = Enumerable.GroupBy(

    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));
  37. Επεκταμένη μορφή 5 • Αφαίρεση type inference με generics IEnumerable<Employee>

    query = Enumerable.GroupBy<Employee, Department>( Enumerable.ThenByDescending<Employee, DateTime>( Enumerable.OrderBy<Employee, string>( Enumerable.Where<Employee>(employees, new Func<Employee,bool> (BigSalary), new Func<Employee, string> (NameFunc), new Func<Employee, DateTime> (StartFunc), new Func<Employee, Department> (DeptFunc));
  38. C# vs Java C# • Closures • Runtime generics •

    Generics και με primitive types • Delegates • Events • LINQ • Extension methods • First-class properties • Iterators • Operator overloading • Indexers • Anonymous types • Expression trees • Using blocks • Μη ελεγχόμενα exceptions • Decimal τύποι Java • Enumerations • Inner Classes • Checked exceptions • Μικρό unit διανομής • Περισσότερα IDE’s • Τρέχει ώριμα δυναμικές γλώσσες
  39. Σύνδεσμοι • http://msdn.microsoft.com • http://www.studentguru.gr • http://www.microsoft.com/express • http://www.windowsclient.net •

    http://www.asp.net • http://creators.xna.com • http://www.dreamspark.com • http://channel9.msdn.com • http://silverlight.net