Introduktion till programmering med C#
Innehållsförteckning
Del 1.
Språket C#
Statements
När vi i det svenska språket ska formulera meningar så sätter vi ihop ord till meningar och avslutar med en punkt.
I C# så formulerar vi statements som kan jämföras med meningar i det svenska språket. I C# består statements av variabler och uttryck och avslutas med semikolon(;).
Ta följande exempel:
decimal result = value1 + value2;
Hela raden är ett statement(mening) som avslutas med ett semikolon.
value1 + value2 är ett uttryck i detta fall en beräkning
Block
När vi i det svenska språket vill sätta samman flera meningar använder vi paragrafer eller stycken av text.
I C# har vi block av kod som motsvarar flera statement och uttryck grupperade mellan måsvingar eller krullparanteser😁({}).
Exempel:
if(10 < 8){
// Då gör vi något.
}
else{
// Annars gör vi detta.
}
Data Typer
Vi ska börja med att gå igenom de primära datatyperna som finns tillgängliga i .NET Core. Listan är inte på något sätt komplett, vi kommer under resans lopp att upptäcka nya typer. Däremot så kommer vi att gå igenom ett mycket viktigt område. Minneshantering, var lagras våra datatyper och hur kommer vi åt dess värde.
I .NET har vi två kategorier av datatyper Värde typer (Value types) och Referens typer (Reference types).
Typ | V | R |
---|---|---|
int | X | |
char | X | |
bool | X | |
double | X | |
decimal | X | |
enum | X | |
string | X | |
array | X | |
object | X |
V = Värde typ(Value type) R = Referens typ(Reference type)
Value och Reference variabler
För att förstå vad skillnaden är mellan en referens typ och en värde typ så måste vi förstå hur datorns minne är uppdelat för våra applikationer.
Internminnet eller RAM(Random Access Memory) i en dator är uppdelat i tre delar:
- Static Area (Static Memory)
- Är placerat i början på RAM
- Är till för att lagra information som inte ändras under applikationens exekvering
- Stack (Automatic Memory)
- Här lagras information som automatiskt tas bort när den inte längre används
- Datatypen måste vara en värde typ(Value Type)
- Heap (Free Store)
- Här lagras information som är skapas via nyckelorder new
- Eller om datatypen är en referens typ(Reference Type)
- Value = variabeln och dess värde är lagrat på stack arean. Vilket betyder att när vi behöver få tag i variabeln och dess värde behöver vi endast gå till stack arean i minnet och leta upp variabeln och vi har dess värde
- Referens = variablen är lagrad på stack arean i minnet men värdet är lagrat på heap arean. Hur kommer vi då åt värdet om variabeln är placerad någon annanstans än värdet. När vi skapar en referens typ och sätter ett värde så placeras värdet på heap arean och en adress skapas. Denna adress knyts till variabelns namn som lagras på stack arean.
Detta innebär att när vi vill läsa ut värdet på en referens typ så måste först variabeln hittas på stacken. Där hittar vi adressen till värdet och denna adress används nu för att hämta värdet på vår variabel. Se följande exempel:
double amount; // Kommer att placeras på stacken.
string fromCurrency = "SEK" // Kommer att placeras på heap.
string toCurrency = "USD" // Kommer att placeras på heap.
Nu har vi en bättre förståelse för vilka datatyper vi kan använda samt var de lagras och hur vi kan vi läsa ut dess värden.
Låt oss gå vidare och diskutera uttryck och operatorer.
Uttryck och Operatorer
Uttryck
Ett uttryck i kod kan summeras som en beräkning som returnerar något
Exempel:
int x = 10;
int y = 5;
int result = 0;
result = x + y;
Raden (x + y) är ett uttryck. Precis som variabler så har ett uttryck en typ och ett värde. I vårt fall är typen int för x och y och värdena är 10 för x och 5 för y.
Operatorer
De grundläggande operatorerna i C# är följande
Operator typ | Symbol | Beskrivning |
---|---|---|
Matematiska | + - * / % | Hederliga företrädes regler gäller |
Tilldelning | = | Initiering eller tilldelning |
Ökning eller minskning av värde | ++ -- | Lägger till 1 eller tar bort 1 |
Jämförelse | == != | lika med eller inte lika med |
Relations jämförelser | > < >= <= | |
Logiska | && || ! | |
Lambda | => | Genväg för en funktion eller metod |
Villkor | ? : | Inline conditionals |
Nullable | ? ?? |
Vi ska nu titta lite närmare på tilldelning och jämförelse operatorerna
Tilldelning
När vi tilldelar ett värde till en värdetyp(value type) skapas en kopia av värdet och placeras på stacken.
När vi tilldelar ett värde till en referenstyp(reference type) skapas en kopia av adressens(reference) på heap delen av minnet.
Exempel:
int x = 10;
int y = x; //y får en kopia av x värde.
string name1 = "Michael";
string name2;
name2 = name1; //name2 får nu en kopia av adressen till name1 i minnet.