Mall för ett C#-program

Slides:



Advertisements
Liknande presentationer
Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Advertisements

Avlusning Debugger (”avlusare”) Breakpoints Watch.
INTRODUKTION TILL PROGRAMMERING
Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
10. Elementen i strukturerad programmering
Klasser och objekt.
Funktioner och programorganisation
Föreläsning 3 Repetition Operatorer Styrstrukturer Deklaration och anrop av metoder.
De fundamentala datatyperna
Datatyper C# C/C++ Java VB Fortran Pascal bool boolean Boolean
Filhantering Grundprincipen för filhantering Öppna filen
Polymorfism.
Välkommen Vahid Mosavat
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Att programmera i språket Java
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
Bastugatan 2. Box S Stockholm. Blad 1 Läsarundersökning Maskinentreprenören 2007.
i olika programmeringsspråk
Programmering B PHP Lektion 2
Föreläsning 11 Arrayer.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Programmering i C# 3. Klasser.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Klasser och objekt Klasser, objekt och instansvariabler
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Programmering B PHP Lektion 2
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Vektorer (klassen Vector) Sortering
Polymorfism.
Arbetspensionssystemet i bilder Bildserie med centrala uppgifter om arbetspensionssystemet och dess funktion
TÄNK PÅ ETT HELTAL MELLAN 1-50
Programmeringsteknik för Media1 & K1
Kouzlo starých časů… Letadla Pár foteček pro vzpomínku na dávné doby, tak hezké snění… M.K. 1 I Norrköping får man inte.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Arbetspensionssystemet i bilder Bildserie med centrala uppgifter om arbetspensionssystemet och dess funktion
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
Föreläsning 10 Stränghantering.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 11 C# I/O Streams C# använder “strömmar” för in- och utmatningsoperationer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
Föreläsning 4 Klasser Och Objekt.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
INTRODUKTION TILL PROGRAMMERING
Förskoleenkät Föräldrar 2012 Förskoleenkät – Föräldrar Enhet:Hattmakarns förskola.
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
Programmeringsteknik för K och Media
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
OOP&M - teori1 OOP&M – Föreläsning 5 kap 8-13 Operatorer,typkonvertering, booleska operatorer, if och else.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 3 Väsentliga delar i ett Javaprogram Input i paketet extra
Presentationens avskrift:

Mall för ett C#-program /* * Här kommenteras vad programmet (klassen) skall göra */ class ProgramNamn { public static void Main () // Här står källkoden för det som skall // utföras när programmet exekveras } // Efter definitionen av Main kan det // följa definitioner av andra metoder.

Namnsättning kompilering class MyClass { } MyClass.cs MyClass.exe

Main - startpunkten class ProgramNamn { public static void Main () // Huvudflödet… } Ordet void innebär att metoden main inte lämnar något returvärde. Ordet public betyder att metoden skall vara åtkomlig utifrån. Det måste den vara för att interpretatorn skall kunna anropa den. Ordet static anger att metoden main är en klassmetod (statisk metod). En klassmetod är en metod som inte är speciell för något visst objekt, utan som har att göra med själva klassen. Eftersom det inte finns något objekt när programmet startar, måste main vara en klassmetod.

Kompilera och exekvera

Literaler Primärminnet ”Hej” 345 -267.678 Hej 345 -267.678

Variabler a = b = c = ”Hej” 345 -267.678 a = ”Hej då” b = -987 Primärminnet a = b = c = ”Hej” 345 -267.678 Symboliska adresser a b c Hej då -987 35.231 Hej 345 a = ”Hej då” b = -987 c = 35.231 -267.678 Variabler kan ändra innehåll

Literaler public class ProgramEtt { public static void Main ( ) System.Console.WriteLine("Hej"); System.Console.WriteLine(345); System.Console.WriteLine(-267.678); }

Variabler public class ProgramEtt { public static void Main ( ) string a = "Hej"; int b = 345; double c = -267.678; System.Console.WriteLine(a); System.Console.WriteLine(b); System.Console.WriteLine(c); } a = "Hej då!"; b = -987; c = 35.231;

Variabler, datatyper En variabel är ett utrymme i datorns arbetsminne som reserveras eller används av ett program under en kortare eller längre del av programmets exekvering. I C# måste alla variabler måste typdeklareras. Det finns följande primitiva datatyper : heltal (sbyte, byte,short, ushort, int, uint, long, ulong) flyttal (float, double, decimal) boolsk typ (bool) tecken (char, string) Övriga datatyper i C# är referenstyper (ej strukter). Värden i dessa typer kallas objekt

variabeldeklarationer int heltal; double flyttal; char tecken; bool klar; string namn; Exempel på tilldelning: heltal = 2; flyttal = 9.0/heltal; flyttal = 9/heltal; tecken = 't'; klar = false; namn = "Göran"; Här blir flyttal = 4.5 Här blir flyttal = 4.0 Observera skillnaden i apostrofer om det är en textsträng eller ett enskilt tecken!

Konstanter Som variabler, men värdet kan inte ändras! const string a = ”Hej”; a = ”Hej då”;

Literaler, variabler och konstanter public class VariabelTesta { public static void Main ( ) int a = 45678; double b = 4.567; System.Console.WriteLine(a * (b + 2)); string s = “Helledudanedå”; System.Console.WriteLine(s); }

OBS! C# är ”case sensitive” ! Identifierare class Loneberakning { public static void Main ( ) const int TIMLÖN = 90; int antaltimmar = 40; int summa = TIMLÖN * antaltimmar; System.Console.WriteLine(summa); } OBS! C# är ”case sensitive” !

Kommentarer Allt mellan /* och */, samt allt efter // på en rad hoppar kompilatorn över class ProgramNamn { // Kommentar på en rad public static void Main () // Kommentar i slutet av rad } /* * En kommentar över * flera rader */

Operationer En operator är en symbol som samverkar på något sätt med operander a = b + c operatorer operation operander operation

Uttryck Ett uttryck är en representation av ett värde, framställt med ett värde eller en operation a = b + c uttryck uttryck uttryck

Uttryck sammansatta uttryck a = b + c primära uttryck

Aritmetiska operatorer * Multiplikation / Division % Rest (modulo) + Addition - Subtraktion = Tilldelning

Särskilda aritmetiska operatorer ++ Ökning av variabelvärdet med 1 -- Minskning av variabelvärdet med 1 *= Tilldelning efter multiplikation /= Tilldelning efter division %= Tilldelning efter modulo += Tilldelning efter addition -= Tilldelning efter subtraktion

Datatyper primitiva datatyper Datatyp Bitar Alias för boolsk boolean 1   Datatyp Bitar Alias för boolsk boolean 1 System.Boolean heltal sbyte 8 System.Sbyte byte System.Byte short 16 System.Int16 ushort System.UInt16 int 32 System.Int32 uint System.UInt32 long 64 System.Int64 ulong System.UInt64 char System.Char flyttal float System.Single double System.Double decimal 128 System.Decimal text string System.String generisk typ object System.Object primitiva datatyper Även om string inte är en primitiv datatyp, kan den ofta användas på ett likartat sätt, ur programmerarens synvinkel, så vi tar med även den redan nu.

Vektorer namn[3] namn ålder

Flerdimensionella vektorer 1 56 2 1 2 3 4

Flerdimensionella vektorer rad kolumn djup

Vektoradressering 3 4 5 2 1 public class ArrayTest { public static void Main () int[] betyg = {3, 4, 5, 2, 4, 3, 1, 3, 2, 4, 2, 3, 4}; int längd = betyg.length; // Antal element System.Console.WriteLine(längd); System.Console.WriteLine(betyg[6]); } Skriver ut ”1” betyg betyg[2] Indexnumreringen börjar med ”0” Primärminnet 3 4 5 2 1

Vektoradressering 3 4 5 2 1 Primärminnet public class ArrayTest { public static void Main () int[][] lista = {{3}, {2, 4, 3}, {1, 4}, {5, 3, 2, 3, 4}}; längd = lista.length; // Antal rader System.Console.WriteLine(längd); längd = lista[3].length; // Antal element i rad 4 } Primärminnet 3 4 5 2 1 lista[2][1] C# är ett av de få programmeringsspråk som kan hantera ”assymetriska” matriser

Vektorer Stack Heap ”objektet” Att C# är ett av de få programmeringsspråk som kan hantera ”assymetriska” matriser beror till viss del på hur dessa lagras. I de flesta språk/miljöer lagras arraymedlemmarna i en enda rad på variabeladressens plats, och adresseringen utav de enskilda elementen sker genom en intern omräkning baserad på datatypens storlek. I C# är vektorer egentligen objekt! I C# är alla objekt referenstyper (till skillnad från de primitiva värdetyperna) Primärminnet Primärminnet är partitionerat i flera olika delar. Alla variabler hamnar i en del som kallas ”stack”. Stack Heap lista ”objektet” När det gäller referenstyper, läggs inte värdet i behållaren på ”stacken”, utan värdet läggs i något som kallas ”heap” adress till objektet Variablens plats håller då en referens till värdet på ”heapen”

Vektoradressering 3 4 5 2 1 Primärminnet Stack Heap ”matris-objektet” lista referens till objektet ”matris-objektet” referens till vektor 0 3 4 5 2 1 referens till vektor 1 referens till vektor 2 referens till vektor 3

variabeltyper Det finns inom grundläggande programmering i huvudsak två slags variabeltyper: värdetyper referenstyper ... int heltal; float flyttal; char bokstav; ... string textsträng; Bok boken; int[] poängen;

Posttyp En struct är en sammansatt typ där flera värden av olika typ kopplas till en enhet. struct Bok { public string namn; public string författare; public float pris; }

Procedurer och funktioner public class SumTest { public static void Main () Summera(); } public static void Summera () System.Console.Write(“Ange tal: “); int a = int.Parse( System.Console.ReadLine() ); int b = int.Parse( System.Console.ReadLine() ); System.Console.WriteLine( a + b );

Procedurer och funktioner public static void Main () { Summera(); } public static void Summera () { System.Console.Write(“Ange tal: “); int a = int.Parse( System.Console.ReadLine() ); int b = int.Parse( System.Console.ReadLine() ); System.Console.WriteLine( a + b ); } Vid anropet av en metod ”hoppar” exekveringen till den punkten i programmet När metoden kört klart, hoppar exekveringen tillbaks, och kör vidare på raden efter anropet

Funktioner I Excel använder vi färdiga funktioner. static int heltal (double tal) { return (int) tal; } Som programmerare gör vi också funktioner själva:

Funktioner & procedurer En procedur var en del utav ett program, som brutits ut för att få det programmet överskådligt, eller för att slippa upprepa kod. Jobbar mot programmets data Därför inget returvärde En funktion sågs från början inte som en del utav programmet, utan snarare ett ”hjälpprogram” för att få fram resultatet utav en viss beräkning eller liknande Jobbar mot data som fåtts i parameterlistan Returnerar resultatet

Metoder I dagens moderna programmeringsspråk har detta oftast förenklats till en enda gemensam konstruktion, vilket vi kallar metod. Varför man använder metoder: för att programmet skall bli mera lättläst för att kunna återanvända kod

Metodens signatur public static int minstaTalet (int a, int b) { Ordet public anger att metoden är synlig utifrån, dvs att även andra program (klasser) kan anropa den. Ordet static anger att metoden är en klassmetod (statisk metod). Detta nyckelord utelämnas helt, om vi vill använda det för objekt. Om en metod skall returnera något måste rätt datatyp anges här. Om metoden inte lämnar något returvärde skriver man istället void. Parametrar till metoden. Dessa fungerar inom metoden som lokala variabler. Metodens namn public static int minstaTalet (int a, int b) { if (a < b) return a; return b; } Kombinationen utav metodnamn, formella parametrar och returtyp, kallas för metodens ”signatur”

Funktioner class GradTest { static double Fahrenheit (double c) return (c * 9 / 5 + 32); } static double Celcius (double f) return ((f - 32) * 5 / 9);   public static void Main () System.out.println("Fahrenheit:" + Fahrenheit(37.2) ); System.out.println("Celcius:" + Celcius(99) );

Procedurer class ProcedurTest { static hälsning = "Hello World!"; static void proceduren () System.out.println(hälsning); }   public static void main (String[] args) ProcedurTest.proceduren();

Metoder y = Math.Sqrt(x); Metoden finns i .NETs klassbibliotek. Sqrt( ) är en statisk metod (klassmetod). Den anropas via klassnamnet. Klassen Math finns i namnrymd System och är deklarerad: public static double Sqrt(double d)

using Vill man använda funktioner i ett program (en klass) från .NETs standardbibliotek måste man inleda med using för den namnrymd där klasserna finns: using System; using System.Collections; Därigenom har man tillgång till alla klasser i den namnrymd man angett. Titta på egen hand i dokumentationen för System.Math System.String System.DateTime System.Random

Metoder i String-biblioteket Studera nu några användbara metoder i klassen System.String Vad kan vi behöva? Vi vill jämföra två strängar veta längden av en sträng plocka ut delar av en sträng Studera metoden Equals ( ) public virtual bool Equals(Object o) Antag följande deklaration: string namn1 = "Ola"; string namn2 = "Olle";

Metoder if (namn1.Equals(namn2)) Skriv ”lika” O Skriv ” olika” if (namn1.Equals(namn2)) System.Console.WriteLine("Lika namn"); else System.Console.WriteLine("Olika namn");

String informatik värden En sträng är en ändlig följd av tecken. OBS!!! När en sträng väl är skapad går det ej att göra några ändringar. string str1 = "informatik"; str1 är en referensvariabel som pekar på det utrymme i primärminnet där strängkonstanten "informatik" ligger. informatik värden 0 1 2 3 4 5 6 7 8 9 index str1 En sträng har en fast längd: str1.Length // str1 har längden 10

String informatik värden Informatik värden Antag att jag vill ha ändra i till I i str1. Hur göra? Svar: Man måste skapa en ny sträng, tex str1 = ”informatik"; str1 = "I" + str1.Substring(1); informatik värden 0 1 2 3 4 5 6 7 8 9 index str1 Informatik värden 0 1 2 3 4 5 6 7 8 9 index

Skillnaden mellan parameter och argument public class Meddelande { public static void Main() Skriv(5); // argumentet är 5 } public static void Skriv(int antalGgr) { //formell parameter är antalGgr for (int i = 0; i < antalGgr; i++) System.Console.WriteLine("Hej Nisse!");

Parametrar antalGgr är en formell parameter och en lokal variabel. i är också en lokal variabel. Dessa är endast definierade inne i metoden. Kom ihåg när ni anropar en metod att alltid kontrollera att de formella och de aktuella parametrarna överensstämmer till antal, ordning och typ!!! Ändra i Meddelande så att Main-metoden endast innehåller anropet skriv(”Cecilia”,5); Utskriften vid körning skall se ut som tidigare, men metoden skall hälsa på rätt person, dvs det som kommer in som argument 1.

Parametrar och argument skall stämma public class Meddelande { public static void Main(String[] args) skriv("Cecilia", 5); // två argument } public static void Skriv(string namn, int antalGgr) { // två formella parametrar for (int i = 0; i < antalGgr; i++) System.Console.WriteLine("Hej " + namn + "!");

return Avslutningen utav en funktion sker med det reserverade ordet return, tillsammans med värdet av det som skall returneras. public class Test { public static void Main(String[] args) int a = Plus(4, 5); System.Console.WriteLine(a); } int Plus(int x, int y) int z = x + y; return z; Där avslutas exekveringen av metoden och exekveringen av programmet där metodanropet ingick fortsätter. Värdet av anropet är värdet av uttrycket efter return.

Returvärden public class Test { public static void Main(String[] args) int a = Plus(4, 5); System.Console.WriteLine(a); } int Plus(int x, int y) return x + y; När return följt av ett uttryck exekveras beräknas värdet av uttrycket. Värdet i det som returneras måste naturligtvis stämma med returtypen, eller kunna omvandlas till samma typ med implicit typkonvertering.

Lär er att hitta i klassbiblioteket Färdiga funktioner Lär er att hitta i klassbiblioteket Funktioner för stränghantering och numerisk omvandling hittar ni bl.a. i: System.String (string) System.Double (double) System.Single (float) System.Int32 (int) System.Int64 (long) Grundläggande matematiska funktioner hittar ni bl.a. i : System.Math

Stack och Heap i primärminnet Operativ-systemarea Stack Heap Maskininstruktioner för varje procedur/funktion inklusive huvudprogrammets kod. Koden är fix, den ändras inte under exekveringen. ”statiska” data: ”värdet” i värdetyper och referenstypernas adresser på heapen ”dynamiska” data: ”värdet” för referenstyperna Instruktionsarea

Sammansatta typer och minnet Beroende på kompilator/språk läggs sammansatta typer i minnet på olika sätt (något förenklat exempel): C++: Bok bokEtt (”Java från grunden”, ”Franzén”, ”Studentlitteratur”, 440); Värdena hamnar på ”stacken”. C++/Java: Bok bokTvå = new Bok(”Java från grunden”, ”Franzén”, ”Studentlitteratur”, 440); Värdena hamnar på ”heapen”. C# skiljer på ”struct” och ”class”, där en variabel för en instans av en struct blir av värdetyp, dvs värdena hamnar på ”stacken”, medan en variabel för en instans ur en class blir av referenstyp, dvs värdena hamnar på ”heapen”.

Vektorer och minnet Beroende på kompilator/språk läggs vektorer i minnet på olika sätt (något förenklat exempel för den grundläggande principen): int[] poängen = {45, 13, 67}; Primärminnesadress: (stacken) Variabeln poängen[0] refererar nu till adress 102. För att kompilatorn skall hitta till poängen[1], lägger den på storleken av en int för varje index. Men i C# fungerar inte vektorer på detta sätt…

Vektorer och minnet I C# är en vektor alltid en referenstyp! int[] poängen = {45, 13, 67}; Primärminnesadress: (stacken) Här refererar variabeln poängen till adress 102. För att kompilatorn skall hitta till poängen[n], går den till adressen på heapen (något förenklat):

Variabler och minnet Olika variabler använder minnet på olika sätt. I C# sker det på följande sätt: variablerna hamnar på ”stacken” Om variablerna är ”värdetyper” hamnar värdena på ”stacken” Om variablerna är ”referenstyper” hamnar värdena på ”heapen” string textsträng = ”Hej!”; r204 Hej! int heltal = 45; 45 float flyttal = (float) 14.6; 14.6 char bokstav = ’a’; 97 45 13 67 r206 int[] poängen = {45,13,67};

Tilldelning med värdetyper Primärminnet 5 kopiering 5 a b

Tilldelning med referenstyper Primärminnet Objektet Ref kopiering Ref a b

Block { } kan uppfattas som en slags parentes. Ibland måste vi använda detta när vi skall ”samla” flera programsatser för att hanteras som ett block. Varje programsats avslutas med semikolon.

Variablers synlighet och räckvidd Finns och syns i hela programmet class MinaVariabler { static int x = 8; public static void Main() int y = 16; MinMetod(); } public static void MinMetod() int z = 32; Finns och syns bara i metoden Main Finns och syns bara i metoden MinMetod Block Här går z ur räckvidden (ur ”scope”) och upphör att existera

Block och lokala variabler using System; public class Lokal { public static void Main ( ) int c = 111; int b = 333; int a = 222; Console.WriteLine(a + b); } Console.WriteLine(c); Block Block

Det utrymme som vi allokerar för programmet måste vi också deallokera. Skräpsamling Det utrymme som vi allokerar för programmet måste vi också deallokera. Minnesutrymmen för värden på stacken återvinns automatiskt (lokala variabler av värdetyp) när variabeln ”gått ur räckvidden”. Minnesutrymmen på heapen måste återvinnas aktivt (värden för variabler av referenstyp och ev variabler av värdetyper som de i sin tur refererar till) I .NET återvinns utrymmen på heapen av en skräpsamlare (Garbage Collector), vid behov.

I .NET finns datatypen System.DateTime Håller både datum och klockslag DateTime lucia = new DateTime(2004, 12, 13); DateTime idag = DateTime.Today; DateTime nu = DateTime.Now;