Variable

[06.03.2020] [Nørderier/Teori]

Som før skrevet er C# typestærkt. Dette betyder at variable deklareres med deres type foran. For de simplt typer sker det sådan her:

using System; namespace KonsolTester { class MainClass { public static void Main (string[] args) { bool b0 = true; int i0 = 3; short s0 = 2; float f0 = 2.3f; double d0 = 2.333999; string str0 = "Hello World!"; //osv. Console.WriteLine ("Hello World!"); } } }

Hver deklaration skal ende med et semikolon. Det samme skal kald til funktioner. En variabel kan deklereres og senere sættes:

using System; namespace KonsolTester { class MainClass { public static void Main (string[] args) { bool b0; int i0; short s0; float f0; double d0; string str0; string str1; //osv. b0 = false; i0 = 2; s0 = 3; f0 = 2.3f; d0 = 2.345; str0 = "Hello World!"; //WriteLine konverterer det hele til en streng. Console.WriteLine (str0 + b0 + i0); } } }

En variabel der er deklæret, men ikke sat, har ingen default value. Hvis vi prøver at bruge feks. WriteLine på str1, får vi en compilerfejl.

Scope

Ovenstående variable er sat inden i en funktion og er derfor lokale. De kan ikke bruges uden for funktionen. Vi siger derfor at deres scope er funktionskroppen. Mere præcist rækker scopet af en variabel fra hvor den er deklæret og til enden af den inderste blok (feks. funktionskrop) den er deklæret i.

Variable erklæret i selve klassen hedder felter, eller fields, for at erklære felter i selve klassen skal de have en af følgende egenskaber: public, protected eller private. For de tre gælder følgende:

  1. public - noget erklæret public er tilgængeligt af alt der har adgang til klassen.
  2. protected - noget erklæret protected er tilgængeligt af alt i selve klassen og alt i underklasser.
  3. private - noget erklæret private er kun tilgængeligt af noget i klassen.

Da Main er i en statisk klasse, bliver vi nødt til at oprette en anden klasse for at teste felter. Dette gøres ret let:

namespace KonsolTester { class MainClass { public static void Main (string[] args) { RegneKlasse regn0 = new RegneKlasse (); Console.WriteLine (regn0.i0); //Fejler da protected Console.WriteLine (regn0.i1); //Fejler da private Console.WriteLine (regn0.i2); } } public class RegneKlasse { public int i0; protected int i1; private int i2; public RegneKlasse() { this.i0 = 100; this.i1 = 200; this.i2 = 300; } } }

Mere om klasser, felter egenskaber og metoder senere. Her er bare værd at bemærke at regn0 er af referencetypen RegneKlasse.

regn0.i0 kan fint skrives til skærmen fra Main-metoden, men hvis vi skriver Console.WriteLine(regn0.i1); eller Console.WriteLine(regn0.i2); får vi følgende compilefejl:

'KonsolTester.RegneKlasse.i1' is inaccessible due to its protection level

...

Index Del