csharp

50 %
50 %
Information about csharp
Entertainment

Published on February 21, 2008

Author: Donato

Source: authorstream.com

Slide1:  C# Μια Γλώσσα για το .NET Framework Γιατί C# ?:  Γιατί C# ? Μια component-oriented γλώσσα Βασίζεται στην εμπειρία του COM+ Εγγενής υποστήριξη για Namespaces Versioning Attribute-driven ανάπτυξη Η δύναμη της C με την ευκολία της Visual Basic® Ελάχιστη καμπύλη εκμάθησης για όλους Πιο σαφής από την C++ Πιο δομημένη από τη Visual Basic Hello World:  Hello World using System; namespace Sample { public class HelloWorld { public HelloWorld() { } public static int Main(string[] args) { Console.WriteLine("Hello World!"); return 0; } } } Ανατομία του Hello World:  Ανατομία του Hello World Περιέχεται στο δικό του namespace Αναφέρεται σε άλλα namespaces με το "using" Δηλώνει μια κλάση εφαρμογής με public πρόσβαση Το σημείο εισόδου είναι το "static int Main( ... )" Τυπώνει "Hello World!" στην κονσόλα συστήματος Χρησιμοποιεί την static μέθοδο WriteLine της System.Console Χώροι Ονομάτων (Namespaces):  Χώροι Ονομάτων (Namespaces) Κάθε ορισμός πρέπει να περιέχεται σε ένα namespace Αποφεύγεται η σύγκρουση ονομάτων Επιβάλλεται η τάξη Τα API γίνονται ευκολότερα στην κατανόηση Μπορούν και πρέπει να εμφωλιάζονται Ομάδες κλάσεων και τύπων κατά σημασιολογία Δηλώνονται με τη λέξη-κλειδί namespace Shortcut με using Κλάσεις:  public class Person : IPersonAge { private int YOB; public Person() { } public int YearOfBirth { get { return YOB; }; set { YOB = value; }; } public int GetAgeToday() { return Today()- YearOfBirth }; } Κλάσεις Υλοποίηση κώδικα και δεδομένων Αναπαριστά μια σημασιολογική ενότητα Υλοποιεί interfaces Κληρονομεί από μία βασική κλάση (base class) Οι κλάσεις περιέχουν: Πεδία (Fields): μεταβλητές μελών Ιδιότητες (Properties): τιμές στις οποίες γίνεται πρόσβαση με ζευγάρια μεθόδων get/set Μέθοδοι (Methods): λειτουργικότητα για το αντικείμενο ή την κλάση Άλλα: events, indexers, delegates Μορφή και Δομή:  Μορφή και Δομή Όχι header files H C# χρησιμοποιεί το μοντέλο «ορισμός μαζί με τη δήλωση” Όπως περίπου Visual Basic, Pascal, Modula, Java Παρόμοιο με την υλοποίηση του "inline” στη C++ Όλος ο κώδικας και οι δηλώσεις σε ένα μέρος Ο κώδικας διατηρείται συνεπής και συντηρήσιμος Πιο εύκολη κατανόηση για συνεργασία με ομάδες Δηλώσεις προσβάσιμες μέσω metadata Μεταγλώττιση υπό συνθήκη – αλλά όχι macros Σύστημα τύπων:  Σύστημα τύπων Βασίζεται στο κοινό σύστημα τύπων του .NET Framework Εγγενής πρόσβασή στο σύστημα τύπων του .NET C# γεννήθηκε από το .NET Βασικές έννοιες: Τα πάντα είναι objects Τα πάντα κληρονομούν το System.Object Ξεκάθαρη διάκριση ανάμεσα στους τύπους τιμής και αναφοράς Με τιμή: απλοί τύποι, enums, structs Με αναφορά: Interfaces, Κλάσεις, Πίνακες Απλοί Τύποι:  Απλοί Τύποι Τύποι Ακεραίων byte, sbyte (8bit), short, ushort (16bit) int, uint (32bit), long, ulong (64bit) Τύποι κινητής υποδιαστολής (IEEE) float (ακρίβεια 7 ψηφίων) double (ακρίβεια 15–16 dψηφίων) Exact Numeric Type decimal (28 σημαντικά ψηφία) Τύποι Χαρακτήρων char (ένας χαρακτήρας) string (πλούσια λειτουργικότητα, τύπος αναφοράς) Τύποι Boolean bool (ξεχωριστός τύπος, διαφορετικός από τον int) Απαριθμητοί Τύποι (Enums):  Απαριθμητοί Τύποι (Enums) Χρησιμοποιούνται στοιχεία με όνομα αντί για αριθμητικές επιλογές Ισχυρός τύπος, όχι αυτόματη μετατροπή σε int Καλύτερο το "Color.Blue" από μια αριθμητική έκφραση Πιο κατανοητό, ευκολότερη συντήρηση Εξiσου ελαφρύ με το απλό int Παράδειγμα: enum Color { Red, Green, Blue, Yellow }; Πίνακες:  Πίνακες Zero based, type bound Βασίζονται στην .NET κλάση System.Array Δηλώνονται με τύπο και μορφή, αλλά χωρίς όρια int[] SingleDim; int[,] TwoDim; int [][] Jagged; Δημιουργούνται με χρήση του new με όρια ή initializers SingleDim = new int[20]; TwoDim = new int[,]{{1,2,3},{4,5,6}}; Jagged = new int[1][]; Jagged[0] = new int[]{1,2,3}; Interfaces:  Interfaces Συμβόλαια δήλωσης σημασιολογίας μεταξύ δύο μερών Επιτρέπουν το component orientation Δηλώνουν τη δομή και τη σημασιολογία για καθορισμένους σκοπούς Αφηρημένοι ορισμοί μεθόδων και ιδιοτήτων Υποστηρίζουν (πολλαπλή) κληρονομικότητα Παράδειγμα: interface IPersonAge { int YearOfBirth {get; set;} int GetAgeToday(); } Inheritance - Polymorphism:  Inheritance - Polymorphism Η C# υποστηρίζει κληρονομικότητα και πολυμορφισμό class Animal { public Animal() { Console.WriteLine("Animal constructor"); } public void Greet() { Console.WriteLine("Animal says Hello"); } Public void Talk() { Console.WriteLine(“Animal talk"); } public virtual void Sing() { Console.WriteLine("Animal song"); }}; class Dog : Animal { public Dog() { Console.WriteLine("Dog constructor"); } public new void Talk() { Console.WriteLine("Dog talk"); } public override void Sing() { Console.WriteLine("Dog song"); }}; Πρέπει να χρησιμοποιήσουμε τη λέξη override για να κάνουμε override μια virtual function και τη λέξη new για να κάνουμε override μια συνάρτηση που δεν έχει δηλωθεί ως virtual. Δομές (Structs):  Δομές (Structs) Ομάδες δεδομένων και κώδικα Σαν τις κλάσεις classes, αλλά: Δεν υποστηρίζεται κληρονομικότητα Περνιούνται πάντα κατά τιμή Κλάσεις vs. Structs Struct  “ελαφρύ” data container, τύπος τιμής Class  Πλούσιο αντικείμενο με αναφορές, τύπος αναφοράς Παράδειγμα: struct Point { double X; double Y; void MoveBy(double dX, double dY) { X+=dX; Y+=dY; } } Προστασία Πρόσβασης:  Προστασία Πρόσβασης Υιοθετεί το μοντέλο της C++ public  Όλοι μπορούν να καλέσουν ή να έχουν πρόσβαση protected  Μόνο τα μέλη έχουν πρόσβαση private  Μόνο τα μέλη και μόνο αυτής της κλάσης Επεκτείνει το μοντέλο της C++ sealed  Δεν μπορεί να χρησιμοποιηθεί σαν βασική κλάση internal  Public πρόσβαση μόνο μέσα στην assembly protected internal  Protected στην assembly Υπερφόρτωση τελεστών:  Υπερφόρτωση τελεστών Οι περισσότεροι τελεστές μπορούν να υπερφορτωθούν Αριθμητικοί, σχεσιακοί, συνθήκης, και λογικοί Όχι υπερφόρτωση για Τελεστές ανάθεσης Ειδικούς τελεστές (sizeof, new, is, typeof) Παράδειγμα: Total operator +(int Amount, Total t) { t.total += Amount; } Ιδιότητες (Properties):  Ιδιότητες (Properties) Κάτι ανάμεσα στα πεδία και στις μεθόδους Χρησιμοποιούμε properties για: Υλοποίηση read-only μελών (παραλείποντας το set) Επικύρωση κατά την ανάθεση Παράγωγες ή σύνθετες τιμές Έκθεση τιμών στα interfaces Παράδειγμα: string Name { get { return name; } set { name = value; } } Δηλώσεις (Statements):  Δηλώσεις (Statements) Σαν τη 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 { ...}; Προστασία ακεραίων από overflow Τελεστές (Operators):  Τελεστές (Operators) Σαν τη C: Λογικοί/Συνθήκης: && || ^ Αριθμητικοί: * / + - % << >> Σχεσιακοί: == != < > >= <= Όχι ακριβώς σαν τη C: Για bool: & και | είναι λογικοί με πλήρη απαρίθμηση Για ακεραίους: & και | υλοποιούν δυαδικό AND/OR Καθόλου σαν τη C: is Ελέγχει τον run-time τύπο as Μετατρέπει μια τιμή σε άλλο τύπο typeof Ανακτά τον run-time τύπο Indexers:  Indexers Συνεπής τρόπος να χτίζεις containers Βασίζονται στην ιδέα των properties Επιτρέπουν δεικτοδοτούμενη (indexed) πρόσβαση στα αντικείμενα που περιέχουν Το προσδιοριστικό του δείκτη (index) μπορεί να είναι οποιουδήποτε τύπου Παράδειγμα: object this[string index] { get { return Dict.Item(index); } set { Dict.Add(index,value); } } Αντιπρόσωποι (Delegates):  Αντιπρόσωποι (Delegates) Κάτι σαν τους δείκτες σε συναρτήσεις στη C/C++ Ισχυροί τύποι, όχι σύγχυση στο type-casting ή σφάλματα. Η δήλωση δημιουργεί μια typed method signature: delegate void Clicked(Element e, Point p); Ο πραγματικός αντιπρόσωπος είναι ένα στιγμιότυπο αυτού του τύπου Clicked MyClickHandler = new Clicked(obj.OnButtonClick); Το όρισμα περνιέται στον constructor του αντιπροσώπου: Αναφορά στο στιγμιότυπο του αντικειμένου και στη μέθοδο. Η μέθοδος πρέπει να έχει την ίδια ακριβώς υπογραφή void OnButtonClick(Element e, Point p) { ... }; Χαρακτηριστικά (Attributes):  Χαρακτηριστικά (Attributes) Παρόμοια με τα attributes που γνωρίζουμε από την IDL (Interface Description Language) Δηλωτική πρόσβαση στη λειτουργικότητα Επεκτάσιμη μέσω custom attributes Επιτρέπει την επαύξηση κώδικα με: Υποδείξεις προς το runtime environment Δηλωτική σημασιολογία [Transaction(TransactionOption.Required)] class MyBusinessComponent :ServicedComponent { ... } [PersonFirstName] String Vorname; [PersonFirstName] String PrimarioNome; Δημιουργία Custom Attributes:  Δημιουργία Custom Attributes Υλοποίηση κλάσης με την Attribute base class Αυτόματη επέκταση της γλώσσας (!) Εξερεύνηση μέσω .NET reflection O.GetType().GetCustomAttributes(…); Παράδειγμα: class PersonFirstNameAttribute : Attribute { public PersonFirstName() { } } Built-in για Συλλογές: foreach:  Built-in για Συλλογές: foreach Αμεση υποστήριξη για επανάληψη επάνω σε συλλογές Μπορεί να χρησιμοποιηθεί για πίνακες και άλλες συλλογές Μπορεί επίσης να χρησιμοποιηθεί με οποιαδήποτε custom κλάση Υλοποιεί το IEnumerable με το GetEnumerator() Το επιστρεφόμενο αντικείμενο υλοποιεί το IEnumerator Παράδειγμα: Point[] Points = GetPoints(); foreach( Point p in Points ) { MyPen.MoveTo(p.x,p.y); } “Δείκτες, χρειάζομαι δείκτες!”:  “Δείκτες, χρειάζομαι δείκτες!” Η C# υποστηρίζει Τον ενσωματωμένο τύπο string Πλούσιο μοντέλο συλλογής απορριμμάτων Παραμέτρους με αναφορά, με χρήση του ref void increment(ref int value, int by) Παραμέτρους εξόδου με χρήση του out bool add(int a, int b, out int c) Εξαλείφει τις περισσότερες χρήσεις των δεικτών στη C++ Οι δείκτες είναι διαθέσιμοι για κώδικα μαρκαρισμένο ως unsafe unsafe void crypt(byte[] arr) { byte * b = arr; ... } Boxing και Unboxing:  Boxing και Unboxing Οι τύποι τιμής μπορούν να είναι "boxed" και "unboxed" Το "Boxing" επιτρέπει σε τύπους τιμής να ταξιδεύουν κατ’ αναφορά Βασίζεται στο γεγονός ότι όλα είναι αντικείμενα. Σκεφτείτε: Ρίχνω την τιμή στο κουτί και κάνω αναφορά στο κουτί. double Value; // Boxing object BoxedValue = Value; // Unboxing Value = (double)BoxedValue; 42 42 42 Unboxed: αντίγραφο Boxed: Αναφορά Συλλογή απορριμμάτων 1/2:  Συλλογή απορριμμάτων 1/2 Οι εφαρμογές C/C++ συχνά παρουσιάζουν διαρροή μνήμης Χειροκίνητη διαχείριση μνήμης Όχι ξεκάθαροι κανόνες για την ιδιοκτησία των αντικειμένων Το COM διορθώνει μερικώς το πρόβλημα με τα ref-counts Οι κλήσεις AddRef/Release πρέπει να εξισορροπούνται Οι SmartPointers δεν καλύπτουν όλα τα προβλήματα. Οι server εφαρμογές πρέπει να μην παρουσιάζουν διαρροές Πρέπει να τρέχουν για μήνες και χρόνια Λύση: αυτόματη διαχείριση μνήμης Συλλογή απορριμμάτων 2/2:  Συλλογή απορριμμάτων 2/2 Ο προγραμματιστής δημιουργεί νέα αντικείμενα και πίνακες Τα πάντα δημιουργούνται και η μνήμη δεσμεύεται με ένα ειδικό keyword. Το περιβάλλον εκτέλεσης του .NET παρακολουθεί αυτόματα τη χρήση μνήμης Ο Garbage Collector αφαιρεί αυτόματα τα αχρησιμοποίητα αντικείμενα Πιο αποτελεσματική διαχείριση μνήμης Ευκολία στη χρήση και “μηδενικές διαρροές” Μη ντετερμινιστική καταστροφή:  Μη ντετερμινιστική καταστροφή Μειονέκτημα της συλλογής απορριμμάτων Οι destructors καλούνται σε τυχαίες μελλοντικές χρονικές στιγμές Ο κώδικας τερματισμού δεν είναι ποτέ σύγχρονος Διαταράσσει κάποια καθιερωμένα μοτίβα σχεδίασης από τη C++ Προσοχή: Ο κώδικας δεν πρέπει ποτέ να βασίζεται στους destructors για να απελευθερώσει εξωτερικά resources. Αντίθετα: Υλοποιείστε το IDisposable με το using using( File f = new File("c:\\xyz.xml") ) { ... } IDisposable.Dispose() καλείται επάνω στο αντικείμενο όταν η βγαίνουμε από την εμβέλεια. Συμβάντα (Events):  Συμβάντα (Events) Μοντέλο συμβάντων ενσωματωμένο στη γλώσσα Όλη η διαχείριση γίνεται από τη C# Τα events δηλώνονται με έναν τύπο delegate Η δήλωση δημιουργεί μια πηγή συμβάντος για να γίνει bind event Clicked OnClicked; Τα event sinks γίνονται bind στην πηγή του συμβάντος με delegates Προσθήκη handler: btnAction.OnClicked += MyClickHandler; Απαλοιφή handler: btnAction.OnClicked -= MyClickHandler; Η πηγή του συμβάντος πυροδοτεί event sinks με μια απλή κλήση OnClicked(this,PointerLocation); Χειρισμός Εξαιρέσεων:  Χειρισμός Εξαιρέσεων Παρόμοιος με τη C++ και τη SEH Διαβάζεται ως εξής: try να τρέξεις αυτό τον κώδικα... ... αν προκύψει σφάλμα, catch ό,τι μπορείς να χειριστείς... ...finally άφησε με να τελειώσω το cleanup με το χέρι Παράδειγμα: try { //... run code } catch(SomeException e) { //... handle } finally { //...end gracefully } Κύριες διαφορές από την C++:  Κύριες διαφορές από την C++ Η C# μοιάζει πολύ με την C/C++ Διορθώνει πολλές πηγές bugs: Αυστηρότερο type-checking, type-casts που δεν συγχωρούν αβλεψίες Όχι "fall-through" στο switch Ο bool είναι ισχυρός τύπος “Σχεδόν χωρίς δείκτες”  “Σχεδόν χωρίς General Protection Fault” Ξεχάστε στο κυνήγι των memory leaks Κύριες διαφορές από την Java:  Κύριες διαφορές από την Java Nullable Types Events Partial Classes Anonymous methods Iterators (C# 2.0) Unsafe code (χρήση pointers) Πιο πολλούς τύπους δεδομένων (unsigned….) Partial Types ASP.NET πολύ πιο δυνατό από JSP Attributes Indexers Anonymous Types (επερχόμενη C# 3.5) Class Version Management:  Class Version Management Η πραγματικότητα: Δυο άνθρωποι σε δυο μέρη γράφουν δυο προγράμματα Η κλαση του A χρησιμοποιεί την κλάση του B Ο B υλοποιεί μια μέθοδο CalcResult Στην επόμενη έκδοση, ο A προσθέτει κι αυτός μια CalcResult Ερ.: Ο Β θέλει η δική του CalcResult να παρακάμψει αυτήν του A; Απ.: Μάλλον όχι. Λύση: Δηλώνετε την πρόθεσή σας όταν χρησιμοποιείτε κληρονομικότητα Γράψτε override για να παρακάμψετε μια μέθοδο Μπορείτε να γράψετε new virtual για να μην κληρονομείτε ποτέ από την βασική κλάση. Generics:  Generics Μοιάζουν σαν έννοια με τα templates της C++ Type-safe Evaluate στο runtime Partial Classes – Anonymous Methods:  Partial Classes – Anonymous Methods Η υλοποίηση μιας κλάσης μπορεί να ‘σπάσει’ σε πολλά αρχεία Βοηθάει στην ανάπτυξη λογισμικού από ομάδες προγραμματιστών Anonymous methods : in-line κατασκευή μιας συνάρτησης η οποία προορίζεται για χρήση μέσω delegate Ευκολίες: Σχόλια σε XML:  Ευκολίες: Σχόλια σε XML Συνεπής, ενσωματωμένος τρόπος να δημιουργείτε τεκμηρίωση από τον κώδικα Σχόλια με τρία slashes "///" εξάγονται Εξάγετε πλήρη τεκμηρίωση κατά τη μεταγλώττιση με το διακόπτη /doc Διατίθεται με προκαθορισμένο schema Παράδειγμα: ///<summary> /// This function serves to calculate the /// overall value of the item including all /// taxes /// </summary> /// <remarks> /// Tax calculates in CalcTax() /// </remarks> public decimal GetTotalValue() { } .NET Framework SDK:  .NET Framework SDK C# compiler (και Visual Basic, C++, και JScript) Όλα τα χαρακτηριστικά της γλώσσας Τρέχει από τη γραμμή εντολής Visual Debugger—GuiDebug Βασισμένο στην τεχνολογία του Visual Studio.NET Πλήρης πρόσβαση σε runtime metadata Εργαλεία Nmake, security, configuration, IL Disassembler, ... Δωρεάν για όλους Visual Studio.NET:  Visual Studio.NET Βασισμένο στο .NET Framework SDK Επανεφεύρεση της ιδέας του Visual Studio®, τώρα με: Projects πολλαπλών γλωσσών Ενιαίο περιβάλλον ανάπτυξης για όλες τις γλώσσες και τις εργασίες Εργαλεία: Visual Modeler, Database Management Ενσωματωμένη βοήθεια: Dynamic Help, IntelliSense® Μέγιστη παραγωγικότητα για όλους: Rapid application development Projects μεγάλης κλίμακας Γενικά:  Γενικά Η C# βασίζεται στο component μοντέλο του .NET Framework Νέα γλώσσα με οικεία δομή Εύκολο να υιοθετηθεί από προγραμματιστές της C, C++, Java και Visual Basic Πλήρως αντικειμενοστραφής Βελτιστοποιημένη για το .NET Framework SQL queries πάνω σε collections, με την επερχόμενη C# 3.0 (LINQ – Language Integrated Queries)

Add a comment

Related presentations

Related pages

C-Sharp – Wikipedia

C# (englisch c sharp [ˌsiːˈʃɑːp]) ist eine typsichere, objektorientierte Allzweck-Programmiersprache. Architekt der Sprache ist Anders Hejlsberg im ...
Read more

myCSharp.de - DIE C# und .NET Community | Community-Index

myCSharp.de ist DIE Anlaufstelle für Programmierer, welche sich mit den Themen C# und .NET befassen. In unserer Community findest Du alles ...
Read more

C# - Rheinwerk openbook

C# – Die neue Sprache für Microsofts .NET-Plattform
Read more

C Sharp (programming language) - Wikipedia

C# (pronounced as see sharp) is a multi-paradigm programming language encompassing strong typing, imperative, declarative, functional, generic ...
Read more

guide to C# | Startseite

guide to C# ist das deutschsprachige Tutorial zu der Programmiersprache C#.
Read more

C# Station

Welcome to C# Station! This is a community site for people interested in applying .NET using the C# programming language. We’ve been around since July ...
Read more

CSharpCodeProvider-Klasse (Microsoft.CSharp)

Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch.
Read more

Einführung in das Programmieren mit C# 4.0 - Universität Trier

Einführung in das Programmieren mit C# 4.0 - Universität Trier
Read more

net-informations.com - C# Tutorial , C# Help , C# Source Code

C# Tutorial , C# Help and C# Source code for beginners and advanced users
Read more

Csharp Today

Wenn man darüber nachdenken sollte sich ein Tagesgeldkonto zu zulegen, dann ist ein zu voriger Tagesgeldkontovergleich sehr ratsam. Dieser kann auf ...
Read more