Programmering i C# 10. Klassbiblioteket
Klassbiblioteket 294 datatyper Klasser, structer, interface Namnrymden System och 11 undernamnrymder Även indelat i profiler, som består av underbibliotek Minsta profil är Kernel, bestående av BCL och Runtime Infrastructure Programmering i C# - Kapitel 10
10.1 System 100 datatyper – de mest använda av alla slag Basklassen Object ValueType och 21 härledda structer Exception och 37 härledda exceptionklasser 6 viktiga interface Programmering i C# - Kapitel 10
10.2 System.Collections Endast två centrala samlingsklasser ArrayList är en dynamisk vektor Jämför Array som ges storlek då den skapas Namnet antyder logik både som vektor och som länkad lista: en endimensionell samling Amorterat konstant tidskomplexitet Elementtypen är Object Programmering i C# - Kapitel 10
Hashtable En hashtabell är en vektor av länkade listor, där elementen utgörs av objektpar Ena objektet – Key – avgör vilken lista objektet placeras i Dess GetHashCode anropas, returvärdet bestämmer index i vektorn Andra objektet – Value – utgör data Key kan vara en medlem i Value Programmering i C# - Kapitel 10
Hashtable forts. Hashtable tbl = new Hashtable(); MyClass obj = new MyClass(…); obj.ID = ”Anders”; tbl.Add(obj.ID, obj); // även: tbl[obj.ID] = obj; Key får inte ändras när objektet ligger i hashtabellen Sökning sker med indexoperatorn object found = tbl[”Anders”]; if (found != null && found is MyClass) … Programmering i C# - Kapitel 10
System.Collections.Specialized ArrayList och Hashtable har elementtypen Object, vilket kräver åtskilliga typomvandlingar Specialiserade klassen NameValueCollection är dictionary av sträng/sträng-par Typparameterisering (som i C++) saknas Programmering i C# - Kapitel 10
10.3 System.IO Klasser för filhantering Varianter för läs/skriv mot minne och sträng File och Directory med enbart statiska metoder för traversering m.m. Ej för läsning/skrivning FileStream för läsning/skrivning av byte StreamReader/StreamWriter för text Programmering i C# - Kapitel 10
FileStream Enumtyper för parametrar som styr mode, access och delning FileStream fs = new FileStream( ”readme.txt”, FileMode.Create, FileAccess.ReadWrite, FileShare.None); Enumtyper för parametrar som styr mode, access och delning FileStream fs = new FileStream(”readme.txt”, FileMode.Open); byte[] vec = new byte[fs.Length]; fs.Read(vec, 0, (int)fs.Length); fs.Close(); Programmering i C# - Kapitel 10
StreamReader/StreamWriter Paketerar Stream-objekt och tillför texthantering med konvertering Läsning/skrivning av string och char Konvertering default UTF8-fil mot Unicode Kan styras med System.Text.Encoding-objekt som parameter till Stream-konstruktorn Encoding beskrivs senare Programmering i C# - Kapitel 10
10.4 System.Net System.Net och System.Net.Sockets innehåller klasser för HTTP, samt TCP/UDP HttpWebRequest paketerar en HTTP-fråga, dess metod GetResponse returnerar en HttpWebResponse WebClient gör detsamma helt utan detaljer i metoden OpenRead Returnerar Stream mot ex. HTML-sida Programmering i C# - Kapitel 10
Sockets IPEndPoint är en IP-adress och ett portnummer DNS-tjänst i statiska metoden Dns.Resolve IPAddress ipAddress = Dns.Resolve(”www.xyz.com”).AddressList[0]; IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 80); Programmering i C# - Kapitel 10
Sockets forts. Klassen Socket i System.Net.Sockets Data skickas med metoden Send och läses med Receive UDP-socket utan förbindelse, TCP-socket upprättar server/clientroll Viktigt att stänga socket med Dispose ..eller Close Programmering i C# - Kapitel 10
Sockets exempel // TCP server Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream. ProtocolType.Tcp); listener.Bind(ep); // ep är en IPEndPoint listener.Listen(1); Socket handler = listener.Accept(); // väntar… // TCP client Socket s = … // som i serverexemplet s.Connect(ep); // ep är en IPEndPoint if (s.Connected) … // OBS se komplett exempel i boken! Programmering i C# - Kapitel 10
Konvertering av data Sockets skickar/tar emot bytevektor Applikationsprotokoll ofta textbaserade Text i CLI är Unicode – 16 bit Konvertera med klassen System.Text.Encoding Encoding.ASCII.GetString(myBytes); Encoding.ASCII.GetBytes(myString); Programmering i C# - Kapitel 10
10.5 System.Threading En tråd är ett spår av exekvering Motsvarigheten till en process är i VES en AppDomain Kan vara egen process eller tråd i operativet Trådar i samma AppDomain har samma adressrymd men egna stackar Tråd hanteras med klassen Thread Synkronisering med hjälp av Monitor Programmering i C# - Kapitel 10
Thread Tråd startas genom att man via Thread-objekt anropar metoden Start Parameter är en delegerare av typ ThreadStart ThreadStart-objektet associeras till metod som ska exekveras i ny tråd ThreadStart är void och utan parametrar Programmering i C# - Kapitel 10
Starta sekundärtråd class X { void MethodRunningInNewThread() { … } public void Method() Thread t = new Thread( new ThreadStart( this.MethodRunningInNewThread)); t.Start(); // anrop i ny tråd // befintliga tråden fortsätter } Programmering i C# - Kapitel 10
Synkronisering Då flera trådar accessar samma objekt krävs låsning Blockerande metod sätter trådar i kö Klassen Monitor har statiska metoderna Enter och Exit Parameter är det objekt som ska accessas Object har odokumenterat fält för låsning! Programmering i C# - Kapitel 10
Synkronisering exempel set // setgren i en egenskap { Monitor.Enter(this); a = value; Monitor.Exit(this); } C# har ordet lock för samma ändamål set // setgren i en egenskap { lock (this) { a = value; } } Programmering i C# - Kapitel 10
Asynkron programmering Designmönster i vissa klasser Tidsödande metod Xxx paketeras i BeginXxx som startar ny tråd EndXxx returnerar samma värde som Xxx Är blockerande tills Xxx exekverat BeginXxx returnerar en IAsyncResult som kan användas för övervakning av tråden Programmering i C# - Kapitel 10
Asynkron programmering forts. IAsyncResult har bl.a.: IsCompleted – bool som är true då tråden exekverat AsyncWaitHandle – WaitHandle med flera möjligheter att blockeras viss tid etc. Kan alltså pollas från primärtråden Programmering i C# - Kapitel 10
Asynkron programmering forts. BeginXxx kan också ha parameter av typ AsyncCallback Delegerare som anropas då tråden exekverat Callbackmetoden bör då typiskt anropa EndXxx för att hantera returvärdet Därmed sköts hela proceduren i bakgrund i sekundärtråd! Programmering i C# - Kapitel 10
10.6 System.Text Två centrala klasser: StringBuilder och Encoding StringBuilder är en traditionell strängklass Inkapslar teckenvektor som kan manipuleras Jämför String som är immutable Programmering i C# - Kapitel 10
Encoding Encoding-objekt finns i Stream-objekt och har nämnts i samband med sockets Alltid härledda – Encoding är abstrakt Konverterar teckenuppsättning till/från Unicode Metoderna GetBytes och GetString Statiska egenskaper ger typiska objekt För ASCII, ANSII (heter Default!), UTF8 Programmering i C# - Kapitel 10
10.7 System.Xml XmlTextReader och XmlTextWriter förenklar läsning/skrivning av XML-filer Framförallt XmlTextReader döljer detaljerna i XML-parsingen XmlTextReader reader = new XmlTextReader(”products.xml”); while (reader.Read()) if (reader.NodeType == XmlNodeType.Text) Console.WriteLine(reader.Value); Programmering i C# - Kapitel 10
10.8 System.Globalization Vissa klasser implementerar IFormattable Ger en överlagrad ToString Två extra parametrar som styr formatering En String enligt särskilda regler En IFormatProvider DateTimeFormatInfo används i DateTime NumberFormatInfo används i alla hel- och flyttal Programmering i C# - Kapitel 10
10.9 System.Diagnostics En enda attributklass: ConditionalAttribute Kan anges för metod och styr huruvida metoden kompileras samt huruvida den anropas Programmering i C# - Kapitel 10
10.10 System.Reflection Reflection är när information om datatyper används vid exekvering Informationen finns i assemblyts manifest Central klass är Type I namespace System Metoder i Type returnerar detaljerad information i MethodInfo, EventInfo, FieldInfo m.fl. Programmering i C# - Kapitel 10
System.Reflection forts. Klassen Assembly ger möjlighet analysera ett assembly GetTypes ger en vektor av Type Klassen Module ger motsvarande för en modul (fil med del av assembly) Type.CreateInstance skapar objekt av klassen, med defaultkonstruktorn Programmering i C# - Kapitel 10
10.11 System.Runtime System.Runtime.CompilerServices endast för utveckling av CLI-kompilatorer System.Runtime.InteropServices har klasser för anrop till funktioner i icke-CLI-kod Traditionella DLL-filer Attributklassen DllImportAttribute är central Programmering i C# - Kapitel 10
DllImportAttribute [DllImport(”user32.dll”)] public static extern int MessageBoxA( int hWnd, string msg, string cap, int type); Parametrar översätts automatiskt till den typ de har i DLL-filens funktion Ofta C-type Parametrar till DllImportAttribute-konstruktorn styr beteendet Programmering i C# - Kapitel 10
10.12 System.Security Klasser som gör det möjligt att undersöka begränsningar i rättigheter Central basklass är CodeAccessPermission Metoden Demand testar en uppsättning rättigheter och genererar SecurityException Attributklasser kan testa helt assemblys krav på rättigheter direkt vid laddning Programmering i C# - Kapitel 10