Transcript C# och .NET

Programmering i C#
1. En infrastruktur för
programutveckling
Ursprung

Utvecklingsgrupp hos Microsoft






2
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



Språket C#

3
Common Language Infrastructure
ECMA-334
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);
}
4
Kapitel 1
Hello World i C# forts.
static void Main()
{
Minimal obj =
new Minimal(”Hello World!”);
obj.DeliverMessage();
}
}
}
5
Kapitel 1
Komponentorientering


Typsystemet rent objektorienterat
Ett steg till: komponentorienterat




Stark typkontroll
Skräpsamling
Prestanda


6
Public-deklarerad klass blir komponent
Sämre än C/C++
Bättre än Java…
Kapitel 1
Common Language Infrastructure

Common Type System


Common Language Specification


Mellanformatskoden och metainformationen
Virtual Execution System

7
Obligatoriska och valfria språkmekanismer
Common Intermediate Language


Typkategorier och deras egenskaper
Exekveringsmiljön
Kapitel 1
Centrala begrepp

VB
C++
C#
Perl
Python
Klassbiblioteket
Typsystemet (CTS/CLS)
Exekveringsmiljön (VES)
…
Utvecklarens
API är klassbiblioteket

Kompilerat
till CIL
Operativsystemet
8
Kapitel 1
1.1 Typkategorier

Alla variabler är objekt


Alla typer finns i klassbiblioteket


9
Inga typer i språket
C# har ett antal synonymer till de vanligaste


Har beteende och tillstånd
Motsvarar traditionella inbyggda typer
Typerna har också CIL-namn
Kapitel 1
Tre kategorier

Klasser



Structer



Objekt har variabelnamn som representerar
objektets tillstånd (värde)
”värdetyper”
Interface

10
Objekt hanteras med referensvariabel
”referenstyper”
Klass utan implementation
Kapitel 1
Särskilda C#-kategorier





11
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
12
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


13
BCL + Runtime Infrastructure = Kernel
Levereras i DLL-filer innehållande CIL
Kapitel 1
Undantag (exceptions)


14
Klassbiblioteket
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

15
En av dem innehåller då manifestet
Kapitel 1
Autentisering

Assemblies kan förses med krypterat
hashvärde i manifestet




16
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



En instans kan vara en process eller en
tråd (definieras inte i VES)
VES motsvarighet till process är
AppDomain

17
Full optimering för aktuell plattform
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



18
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