c#: data typer
DESCRIPTION
C#: Data Typer. Indhold:. - PowerPoint PPT PresentationTRANSCRIPT
C#: Data Typer
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 SystemValue vs. reference typerArraysNamespaces
The Common Type System…
1. del
The Common Type System (CTS)CTS er baseret på et hierarki af klasser defineret i FCL
alle typer arver fra Object (undtagen interface typer)
St r i ng Ar r ay Val ueType Except i on Del egat e Cl ass1
Mul t i castDel egat e Cl ass2
Cl ass3
Obj ect
Enum1
St r uct ur e1EnumPr i mi t i ve t ypes
Bool ean
Byt e
I nt 16
I nt 32
I nt 64
Char
Si ngl e
Doubl e
Deci mal
Dat eTi me
System-defined types
User-defined types
Del egat e1
Ti meSpan
Gui d
The Common Language Specification (CLS)
Ikke alle sprog understøtter alle CTS typer og egenskaber
C# understøtter unsigned integer, VB.NET gør ikkeC# er case sensitiv, VB.NET er ikkeC# understøtter pointere (i unsafe mode), VB.NET gør ikkeC# 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
Mapping C# til CTSLanguage keywords map to common CTS classes:Keyword Description Special format for literalsbool Boolean true false
char 16 bit Unicode character 'A' '\x0041' '\u0041'sbyte 8 bit signed integer none
byte 8 bit unsigned integer none
short 16 bit signed integer none
ushort 16 bit unsigned integer none
int 32 bit signed integer none
uint 32 bit unsigned integer U suffixlong 64 bit signed integer L or l suffixulong 64 bit unsigned integer U/u and L/l suffixfloat 32 bit floating point F or f suffixdouble 64 bit floating point no suffixdecimal 128 bit high precision M or m suffixstring character sequence "hello", @"C:\dir\file.txt"
EksempelEt 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.
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 parentesKonversion 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
Value vs. reference typer…
Part 2
Value vs. reference typerI C# er 2 kategorier af data typerValue typer:
variablen repræsenterer en værdi ("bits")
Reference typer:variablen repræsenterer en reference til et objektaktuelle data er indeholdt i objektet
int i;i = 10;
10
string s;s = "calico";
"calico"
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 valuesresten er reference typer
int i;string s;Customer c1, c2;
i = 23;s = "a message";c1 = null;c2 = new Customer(…);
Boxing og UnboxingC# 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!
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; }}
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
Definering af “Lig med”Klasser 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... }
Arrays…
Part 3
Arrays
Arrays er reference typerbaseret på Array klassen i FCLoprettes med new0-baseret indekseringTildelt 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;
Tilgå element
Opret
Antal elementer
Multi-dimensionelle arraysC# 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 objecttwoD = new Customer[10, 100];twoD[0, 0] = new Customer(…);twoD[9, 99] = new Customer(…);
// 2D array as array of arraysjagged2D = 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
Namespaces…
Part 4
NamespacesNamespaces er beregnet til at organisere klasses
et namespace N er et set af klasser i N’s scopenamespaces er ofte indlejrede
namespace Workshop{ public class Customer { . . . }
public class Product { . . . }}//namespace
Workshop.Customer
EksempelFramework Class Library (FCL) indeholder flere tusind klasser
hvordan er de organiserede?hvordan undgås navnsammenfald?
med FCLindenfor FCL
FCL namespacesFCL øverste namespace er "System"FCL teknologier er indlejret i System…
Namespace Purpose Assembly
System Core classes, types mscorlib.dll
System.Collections Data structures mscorlib.dll
System.Data Database access System.Data.dll
System.Windows.Forms GUI System.Windows.Forms.dll
System.XML XML processing System.Xml.dll
OpsummeringCTS er det fælles type system
samme type system for alle sprogtyperne er implementeret med klasser i FCLSimple datatyper er call by value, klasser er call by reference
CLS er den fælles sprog specifikationtyper som med sikkerhed fungerer på tværs af sprog
Pas på med at sammenblande namespaces med assemblies…
namespaces hjælper med organisationassemblies refererer til implementation / packaging