c#: data typer

23
C#: Data Typer

Upload: isha

Post on 23-Feb-2016

46 views

Category:

Documents


0 download

DESCRIPTION

C#: Data Typer. Indhold:. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: C#:  Data Typer

C#: Data Typer

Page 2: 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

Page 3: C#:  Data Typer

The Common Type System…

1. del

Page 4: C#:  Data Typer

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

Page 5: C#:  Data Typer

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

Page 6: C#:  Data Typer

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"

Page 7: C#:  Data Typer

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.

Page 8: C#:  Data Typer

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

Page 9: C#:  Data Typer

Value vs. reference typer…

Part 2

Page 10: C#:  Data Typer

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"

Page 11: C#:  Data Typer

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(…);

Page 12: C#:  Data Typer

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!

Page 13: C#:  Data Typer

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; }}

Page 14: C#:  Data Typer

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

Page 15: C#:  Data Typer

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... }

Page 16: C#:  Data Typer

Arrays…

Part 3

Page 17: C#:  Data Typer

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

Page 18: C#:  Data Typer

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

Page 19: C#:  Data Typer

Namespaces…

Part 4

Page 20: C#:  Data Typer

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

Page 21: C#:  Data Typer

EksempelFramework Class Library (FCL) indeholder flere tusind klasser

hvordan er de organiserede?hvordan undgås navnsammenfald?

med FCLindenfor FCL

Page 22: C#:  Data Typer

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

Page 23: C#:  Data Typer

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