1. En infrastruktur för programutveckling 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 { public class Minimal private string message; public Minimal(string message) this.message = message; } public void DeliverMessage() System.IO.Console.WriteLine(message); Kapitel 1
Hello World i C# forts. static void 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
Typsystemet (CTS/CLS) Exekveringsmiljön (VES) 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 C# och .NET 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 Structer Interface 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