csharp

Information about csharp

Published on February 21, 2008

Author: Donato

Source: authorstream.com

Content

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)

Related presentations


Other presentations created by Donato

The Rise of Dictators
20. 04. 2008
0 views

The Rise of Dictators

Conference Brochure web
10. 01. 2008
0 views

Conference Brochure web

P17 Biljakovic
11. 01. 2008
0 views

P17 Biljakovic

10 02 ed406a
12. 01. 2008
0 views

10 02 ed406a

Physical descriptions Bible
13. 01. 2008
0 views

Physical descriptions Bible

4 Mining
14. 01. 2008
0 views

4 Mining

Role of Race and Ethnicity
14. 01. 2008
0 views

Role of Race and Ethnicity

main stream school as a deaf
14. 01. 2008
0 views

main stream school as a deaf

InfantWellness
15. 01. 2008
0 views

InfantWellness

434 L18 Marine Pollution 07
15. 01. 2008
0 views

434 L18 Marine Pollution 07

WinRDBI
16. 01. 2008
0 views

WinRDBI

Alexander von Humboldt fertig
17. 01. 2008
0 views

Alexander von Humboldt fertig

Mesa Teen Dating Violence65466
17. 01. 2008
0 views

Mesa Teen Dating Violence65466

water LCHS
17. 01. 2008
0 views

water LCHS

galileo new
17. 01. 2008
0 views

galileo new

Colonies Powerpoint
19. 01. 2008
0 views

Colonies Powerpoint

OSTP Lewis
21. 01. 2008
0 views

OSTP Lewis

pptEarlyBCNewspapers
21. 01. 2008
0 views

pptEarlyBCNewspapers

SumerOL
22. 01. 2008
0 views

SumerOL

Whole Show Welch 2007
23. 01. 2008
0 views

Whole Show Welch 2007

JC NIH INRIA160407ppt
05. 02. 2008
0 views

JC NIH INRIA160407ppt

Wedding Presentation email
05. 02. 2008
0 views

Wedding Presentation email

InfoSec120804 web 2
04. 02. 2008
0 views

InfoSec120804 web 2

The Civil War Era
12. 02. 2008
0 views

The Civil War Era

Psychotherapy
28. 01. 2008
0 views

Psychotherapy

energysecurity
06. 02. 2008
0 views

energysecurity

david35
07. 02. 2008
0 views

david35

Fichner Rathus CH09
11. 02. 2008
0 views

Fichner Rathus CH09

wipo smes ge 07 www 81572
12. 02. 2008
0 views

wipo smes ge 07 www 81572

rpc dae
09. 01. 2008
0 views

rpc dae

Klein
09. 01. 2008
0 views

Klein

Android Idea
25. 02. 2008
0 views

Android Idea

Peds Asthma
28. 02. 2008
0 views

Peds Asthma

Cubism
03. 03. 2008
0 views

Cubism

ppt00022
04. 02. 2008
0 views

ppt00022

George Mucibabici Deloitte
07. 03. 2008
0 views

George Mucibabici Deloitte

African Culture
10. 01. 2008
0 views

African Culture

04 TransmissionMedia
24. 03. 2008
0 views

04 TransmissionMedia

Performance Driven Government
31. 03. 2008
0 views

Performance Driven Government

i20083241155
14. 04. 2008
0 views

i20083241155

Israel Paralympics
16. 04. 2008
0 views

Israel Paralympics

MDiazGELSS2003
17. 01. 2008
0 views

MDiazGELSS2003

Skarb sport reng
22. 04. 2008
0 views

Skarb sport reng

H105l
14. 01. 2008
0 views

H105l

f7
07. 02. 2008
0 views

f7

Hood Canal CD Final 25Jan08 1
24. 04. 2008
0 views

Hood Canal CD Final 25Jan08 1

US Fed Indian Policy
11. 03. 2008
0 views

US Fed Indian Policy

Introduccion al Fast Track
06. 05. 2008
0 views

Introduccion al Fast Track

CHINA ROHS SEMI CONWEST redick
07. 05. 2008
0 views

CHINA ROHS SEMI CONWEST redick

obrien
08. 05. 2008
0 views

obrien

GMO EU Bans
08. 05. 2008
0 views

GMO EU Bans

audvotpowpoint
30. 04. 2008
0 views

audvotpowpoint

Abo dar3 hav mots
07. 02. 2008
0 views

Abo dar3 hav mots

vpbusiness 2004
11. 02. 2008
0 views

vpbusiness 2004

Beauty
08. 03. 2008
0 views

Beauty

LA STEM pres5
16. 01. 2008
0 views

LA STEM pres5

Polarhide And Roof Heat Edited
25. 01. 2008
0 views

Polarhide And Roof Heat Edited

Games2
22. 01. 2008
0 views

Games2

tvp urg
17. 01. 2008
0 views

tvp urg

wombwithaview
08. 01. 2008
0 views

wombwithaview

Proposal slides
08. 04. 2008
0 views

Proposal slides

corporate partnership
22. 01. 2008
0 views

corporate partnership

POA June 2006
10. 01. 2008
0 views

POA June 2006

LifeShapes 1
29. 01. 2008
0 views

LifeShapes 1

Clavel
22. 01. 2008
0 views

Clavel