180 likes | 405 Views
Programmering i C#. 1. En infrastruktur för programutveckling. Ursprung. Utvecklingsgrupp hos Microsoft Anders Hejlsberg Generellt typsystem oberoende av språk Kompilering till mellanformat Självbeskrivande komponenter Heltäckande klassbibliotek Internetanpassat distribuerat system.
E N D
Programmering i C# 1. En infrastruktur för programutveckling
Ursprung • Utvecklingsgrupp hos Microsoft • Anders Hejlsberg • Generellt typsystem oberoende av språk • Kompilering till mellanformat • Självbeskrivande komponenter • Heltäckande klassbibliotek • Internetanpassat distribuerat system Kapitel 1
ECMA-standard • Centrala delar i typsystem, mellanformat, exekveringsmiljö och klassbibliotek • Common Language Infrastructure • ECMA-334 • Språket C# • ECMA-335 Kapitel 1
Hello World i C# namespace Studentlitteratur.CSharp { publicclass Minimal { privatestring message; public Minimal(string message) { this.message = message; } publicvoid DeliverMessage() { System.IO.Console.WriteLine(message); } Kapitel 1
Hello World i C# forts. staticvoid Main() { Minimal obj = new Minimal(”Hello World!”); obj.DeliverMessage(); } } } Kapitel 1
Komponentorientering • Typsystemet rent objektorienterat • Ett steg till: komponentorienterat • Public-deklarerad klass blir komponent • Stark typkontroll • Skräpsamling • Prestanda • Sämre än C/C++ • Bättre än Java… Kapitel 1
Common Language Infrastructure • Common Type System • Typkategorier och deras egenskaper • Common Language Specification • Obligatoriska och valfria språkmekanismer • Common Intermediate Language • Mellanformatskoden och metainformationen • Virtual Execution System • Exekveringsmiljön Kapitel 1
Centrala begrepp • Utvecklarens API är klass-biblioteket • Kompilerat till CIL VB C++ C# Perl Python … Klassbiblioteket Typsystemet (CTS/CLS) Exekveringsmiljön (VES) Operativsystemet Kapitel 1
1.1 Typkategorier • Alla variabler är objekt • Har beteende och tillstånd • Alla typer finns i klassbiblioteket • Inga typer i språket • C# har ett antal synonymer till de vanligaste • Motsvarar traditionella inbyggda typer • Typerna har också CIL-namn Kapitel 1
Tre kategorier • Klasser • Objekt hanteras med referensvariabel • ”referenstyper” • Structer • Objekt har variabelnamn som representerar objektets tillstånd (värde) • ”värdetyper” • Interface • Klass utan implementation Kapitel 1
Särskilda C#-kategorier • Särskild syntax för tre andra kategorier: • Enum – uppräkningsbar typ (struct) • Delegate – metodreferens (klass) • Event – utökad delegate (metod) • Obs endast syntaxmässigt annorlunda Kapitel 1
Exempel typkategorier MyClass obj; obj = new MyClass(); MyStruct var; int x = 5; // en struct av typen Int32 int y = 10; y = x; // y och x är olika variabler med samma värde string s1 = ”Ett”; string s2 = ”Två”; s1 = s2; // s1 och s2 refererar till samma sträng Kapitel 1
1.2 Klassbiblioteket • 294 standardiserade typer • Gemensam basklass heter Object (object) • Indelat i namnrymder, roten heter System • Indelat i underbibliotek, centrala heter BCL • Underbibliotek utgör profiler • BCL + Runtime Infrastructure = Kernel • Levereras i DLL-filer innehållande CIL Kapitel 1
Undantag (exceptions) • Klass-biblioteket tillämpar undantag • Var beredd hantera undantag! try { DangerousCall(); … } catch (Exception e) { Console.WriteLine(”Oväntat fel…”); … } Kapitel 1
1.3 Mellanformatet • Kompilering ger fil innehållande CIL-kod samt metainformation: ett assembly • Metainformationen kallas manifest • En applikation består av en eller flera assemblies • Assembly kan delas i flera filer: moduler • En av dem innehåller då manifestet Kapitel 1
Autentisering • Assemblies kan förses med krypterat hashvärde i manifestet • krypteras med private key • public key bifogas också manifestet • VES kan göra motsvarande hash, dekryptera manifestets hash och jämföra • Ger mycket säker verifiering av både innehåll och leverantör Kapitel 1
JIT-kompilering • CIL-koden kompileras till maskinkod vid programstart • Full optimering för aktuell plattform • En instans kan vara en process eller en tråd (definieras inte i VES) • VES motsvarighet till process är AppDomain • Isolerar exekverande program Kapitel 1
1.4 Skräpsamling • Objekt som lämnas utan referenser vid exekvering raderas av VES skräpsamlare • Ingen motsats till new i C# • Algoritmen ospecificerad • Därmed okänt när objekt raderas • Destruktorer anropas vid ospecificerad tidpunkt någon gång mellan sista referensens försvinnande och programavslut Kapitel 1