1 / 24

C#: Data Typer

C#: Data Typer. Indhold:.

claire
Download Presentation

C#: Data Typer

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C#: Data Typer

  2. Indhold: “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different languages, to work together. To ensure interoperability across languages, Microsoft has also defined the CLS, or Common Language Specification, a subset of the CTS that all languages support. Otherwise, the types in C# are what you would expect from a modern OOPL…” • The Common Type System • Value vs. reference typer • Arrays • Namespaces

  3. 1. del • The Common Type System…

  4. The Common Type System (CTS) • CTS er baseret på et hierarki af klasser defineret i FCL • alle typer arver fra Object (undtagen interface typer)

  5. The Common Language Specification (CLS) • Ikke alle sprog understøtter alle CTS typer og egenskaber • C# understøtter unsigned integer, VB.NET gør ikke • C# er case sensitiv, VB.NET er ikke • C# understøtter pointere (i unsafe mode), VB.NET gør ikke • C# understøtter operator overloading, VB.NET gør ikke • CLS var ment til at fremme forbindelsen mellem kode skrevet i forskellige sprog • Den overvejende del af klasserne i FCL er i overensstemmelse med CLS

  6. Mapping C# til CTS • Language keywords map to common CTS classes:

  7. Eksempel • Et eksempel på brug af typer i C# • Variable skal erklæres (compiler) • Variable skal initialiseres (compiler) public class App { public static void Main() { int width, height; width = 2; height = 4; int area = width * height; int x; int y = x * 2; ... } } Erklæring Erklæring + initialiering Fejl, x er ikke init.

  8. Type konversion • Implicit type konversion: • fra mindre til større type • Ellers er der brug for typecast eller explicit konversion… • typecast syntaksen er typen i parentes • Konversion baseret på System.Convert klassen int i = 5; double d = 3.2; string s = "496"; d = i; i = (int) d; i = System.Convert.ToInt32(s); implicit konversion typecast nødvendig Konversion nødvendig

  9. Part 2 • Value vs. reference typer…

  10. "calico" Value vs. reference typer • C# separates data types into two categories • Value typer: • variablen repræsenterer en værdi ("bits") • Reference typer: • variablen repræsenterer en reference til et objekt • aktuelle data er indeholdt i objektet int i; i = 10; 10 string s; s = "calico";

  11. Hvordan ved du hvad der er hvad? • Lær det udenad! • Men ellers er det ikke så svært: • primitive typer som bool, int og double er values • resten er reference typer int i; string s; Customer c1, c2; i = 23; s = "a message"; c1 = null; c2 = new Customer(…);

  12. Boxing og Unboxing • C# konverterer værdi <==> objekt, når der er behov • værdi ==> objekt kaldes "boxing" • objekt ==> værdi kaldes "unboxing" int i, j; object obj; string s; i = 32; obj = i; // boxed copy! i = 19; j = (int) obj; // unboxed! s = j.ToString(); // boxed! s = 99.ToString(); // boxed!

  13. Brugerdefinerede reference typer(Abstrakte datatyper) • Klasser! • for eksempel en kundeklasse… public class Customer { public string name; // fields public int id; public Customer(string name, int id) // constructor { this.name = name; this.id = id; } public override string ToString() // method { return "Customer: " + this.name; } }

  14. Anvendelse af reference typer (klasser) … • Oprettelse, tildeling, og sammenligning: Customer c1, c2, c3; string s1, s2; c1 = new Customer("joe hummel", 36259); c2 = new Customer("marybeth lore", 55298); c3 = null; // c3 references no object c3 = c1; // c3 now references same obj as c1 if (c1 == null) ... // do I ref an object? if (c1 == c2) ... // compares references if (c1.Equals(c2)) ... // compares objects if (s1 == s2) ... // exception: == overloaded to // compare string data

  15. Definering af “Lig med” • Klasses bør omdefinere Equals public class Customer { . . . public override bool Equals(object obj) { Customer other; if ((obj == null) || (!(obj is Customer))) return false; // definitely not equal other = (Customer) obj; // typecast to access return this.id == other.id; // equal if same id... }

  16. Part 3 • Arrays…

  17. Arrays • Arrays er reference typer • baseret på Array klassen i FCL • oprettes med new • 0-baseret indeksering • Tildelt default værdier (0 for numerisk, null for references, etc.) int[] a; a = new int[5]; a[0] = 17; a[1] = 32; int x = a[0] + a[1] + a[4]; int l = a.Length; Opret Tilgå element Antal elementer

  18. Multi-dimensionelle arrays • C# understøtter arrays som et enkelt objekt ELLER som array af arrays • nedenstående implementer et 2D array med forskellig længde (Jagged) Customer[,] twoD; int[][] jagged2D; // 2D array as single object twoD = new Customer[10, 100]; twoD[0, 0] = new Customer(…); twoD[9, 99] = new Customer(…); // 2D array as array of arrays jagged2D = new int[10][]; jagged2D[0] = new int[10]; jagged2D[1] = new int[20]; jagged2D[9] = new int[100]; jagged2D[0][0] = 1; jagged2D[9][99] = 100; Samme længde Forskellig længde

  19. Part 4 • Namespaces…

  20. Namespaces • Namespaces er beregnet til at organisere klasses • et namespace N er et set af klasser i N’s scope • namespaces er ofte indlejrede namespace Workshop { public class Customer { . . . } public class Product { . . . } }//namespace Workshop.Customer

  21. Eksempel • Framework Class Library (FCL) indeholder flere tusind klasser • hvordan er de organiserede? • hvordan undgås navnsammenfald? • med FCL • indenfor FCL

  22. FCL namespaces • FCL øverste namespace er "System" • FCL teknologier er indlejret i System…

  23. Opsummering • CTS er det fælles type system • samme type system for alle sprog • typerne er implementeret med klasser i FCL • Simple datatyper er call by value, klasser er call by reference • CLS er den fælles sprog specifikation • typer som med sikkerhed fungerer på tværs af sprog • Pas på med at sammenblande namespaces med assemblies… • namespaces hjælper med organisation • assemblies refererer til implementation / packaging

  24. Referencer • Bøger: • T. Archer and A. Whitechapel, "Inside C#" (2nd edition) • S. Lippman, "C# Primer" • J. Mayo, "C# Unleashed"

More Related