Introduktion til C# - del 1

Tags:    .net c#
Skrevet af Bruger #2853 @ 25.01.2005

C# og .NET



C# er et simpelt, moderne, objektorienteret programmeringssprog. C# ligger meget tæt op ad programmeringssprog som C++ og Java, og folk der har programmeret i disse sprog, vil nikke genkendende til mange aspekter af C#.

C# er standardiseret af ECMA International som ECMA-334 standarden og er også standardiseret af ISO/IEC som ISO/IEC 23270 standarden.

C# er et sprog som er designet til .NET Framework’et. Selvom C# er designet til at generere kode til .NET Framework’et, er C# altså et sprog i sig selv, og IKKE en del af .NET. .NET indeholder ting som ikke er med i C#, og det vil overraske mange når jeg siger at C# indeholder ting som der ikke er understøttelse for i .NET. Dog er C# ment som et sprog til .NET, og det er derfor vigtig at man har en nogenlunde forståelse for hvordan .NET er bygget op – hvis ikke vil jeg anbefale at man læser en af de andre artikler omkring .NET, her på udvikleren

Hvad kræves der for at komme i gang?



Det kræver faktisk ikke specielt meget at komme i gang med at lave programmer i C# - det eneste der kræves er at du henter .NET SDK (Software Development Kit). SDK’et indeholder alt hvad du behøver: dokumentation, demoprogrammer, udviklingsværktøjer og compiler.

Hvis du allerede har installeret Visual Studio .NET er det ikke nødvendigt at installere .NET SDK, da SDK’et er med, når man installerer Visual Studio .NET – dog vil jeg, for folk som har gjort dette, anbefale at de ikke benytter sig af Visual Studio .NET, da ideen med denne artikel er at lære at bruge C# fra bunden af. Visual Studio .NET er til at starte med, kun med til at forvirre mange folk. Jeg vil derfor anbefale folk at de får fat i en simpel teksteditor, hvor de kan skrive deres kildekode ind. For at holde det så simpelt som muligt, her fra starten af.

Vores første C# program:



For at følge traditionen, vil jeg i denne artikel også lægge ud med at lave det normale ”Hello World!” program – et simpelt program der ikke gør andet end at udskrive ”Hello World!” på skærmen og derefter afslutter.

Fold kodeboks ind/udKode 


Du kan skrive dette stykke kode i hvilken som helst teksteditor du ønsker at benytte dig af. Når du har gjort det, skal du gemme tekstfilen som en fil der har endelsen .cs, navnet på filen er lige meget

Compiling af programmet:



Du kan compile dette program ved at benytte dig af den kommandobaserede C# compiler som følger med når man installerer Visual Studio .NET eller .NET SDK.

Alt afhængig af hvad du har kaldt din fil, kan du compile den ved at skrive (jeg antager at du har kaldt den First.cs):

Fold kodeboks ind/udKode 


Compilerens opgave består i at ændre din kildekode til et brugbart program. Faktisk er dette ikke helt rigtig, da .NET benytter sig af et sprog der kaldes MSIL (Microsoft Intermediate Language), det er dette sprog som compileren oversætter din kildekode til. Når programmet så skal køres, er det et andet værktøj, kaldet JIT (Just-In-Time) der sørger for at det MSIL kode som er blevet fremstillet, bliver lavet om til et eksekverbart program.

Efter dette er gjort, vil du have en fil der hedder First.exe (hvis du altså har kaldt din fil First.cs). Når du kører First.exe vil programmet udskrive ”Hello World!” og derefter afslutte.

Et kig på kildekoden:



Det første der er meget vigtig at lægge mærke til, er at C#-sproget er case-sensitive, dette betyder altså, at der er forskel på store og små bogstaver, du vil derfor få fejl, hvis du har skrevet ”console” i stedet for ”Console”.

Den første linie i programmet definerer et namespace:

Fold kodeboks ind/udKode 


Du vil oprette utrolig mange navne når du programmer med C#. Ethvert objekt, type osv. skal være navngivet i C#. Dette giver dog imidlertid et problem, da man på et tidspunkt højst sandsynligt vil komme til at benytte sig af et navn fra .NET Framework’et. For at undgå dette opretter man et namespace, hvori ens egne navne befinder sig.

Læg mærke til at når du starter og slutter et namespace, gør du det ved at indikere starten med {, og slutningen med } – i et program skal der altid være lige mange { som }.

Indenfor tuborgklammerne, som definerer start og slut på dit namespace, skriver du alt din anden kode, som skal tilhøre netop dette namespace. Fx, opretter vi her en klasse kaldet MainClass.

Klasser er selve kernen til objektorienteret programmering. Da klasser er et større emne for sig selv, vil jeg ikke beskrive det i detaljer, men blot nævne at klasser definerer en kategori, eller type af objekter.

Den 3. linie i vores program opretter en klasse kaldet MainClass, ligesom med namespace, så skal start og slut på en klasse også defineres med { og }. Linie 3 til 4 i vores program definerer starten på klassen kaldet MainClass:

Fold kodeboks ind/udKode 


En metode er et lille stykke kode som udfører en bestemt manøvre. Metoden Main() er pr. definition den metode som er udgangspunktet for alt andet i dit program, dette vil sige, at det er herfra dit program vil starte. De følgende linier markerer begyndelsen på metoden Main():

Fold kodeboks ind/udKode 


Vi har imidlertid dog valgt at indsætte en kommentarlinie, lige inden vi definerer metoden Main():

Fold kodeboks ind/udKode 


En kommentar er ganske enkelt en notits til dig selv eller andre. Indsættelse af kommentarer kan gøre læsningen af din kode nemmere for både dig selv og andre. Du kan placere kommentarer hvor som helst i dit program.

C# understøtter 3 forskellige muligheder hvorpå du kan skrive kommentarer. Kommentaren i vores program begynder med to skråstreger (//). Alt på højre side af disse to skråstreger vil blive ignoreret af compileren, og betragtet som en kommentar.

Den anden mulighed for at skrive kommentarer kaldes multi-line comments, og indikeres som start med en skråstreg og en stjerne (/*). For at indikere hvor din kommentar skal slutte, skal du skrive det modsatte af hvad du gjorde, da du indikerede starten af din kommentar (*/). Disse kommentarer kan spendere over flere linier, og slutter først når du har indikeret at din kommentar skal slutte.

Et lille eksempel på en kommentar som benytter sig af at være skrevet over flere linier:

Fold kodeboks ind/udKode 


Den 3. og sidste mulighed for at definere kommentarer starter med tre skråstreger (///), dette kaldes for XML-kommentering, og er et kæmpe emne for sig selv, jeg vil derfor ikke komme ind på denne form for kommentering i denne artikel.

Hvis vi går tilbage til vores metode Main, er der sikkert nogle der vil have opdaget at vi definerer vores metode Main med nøgleordene static og void.

Fold kodeboks ind/udKode 


Nøgleordet static betyder at man kan få adgang til denne metode, uden først at oprette et nyt objekt af klassen. Brugen af static i metoder, udover i Main, er meget avanceret, og jeg vil derfor ikke komme ind på det i denne artikel.

Oftest er det sådan at en metode bliver kaldt af en anden metode. Den kaldte metode udfører så et eller andet stykke arbejde, og returnerer en værdi til den foregående metode. Hvis en metode ikke returnerer nogen værdi, giver man den nøgleordet void. Nøgleordet void fortæller compileren at metoden ikke vil returnere nogen værdi.

Efterfulgt af metodens navn er der to parenteser, henholdsvis en slut og en start. Imellem disse parenteser er det muligt at skrive parametre til metoden, hvis man ønsker at metoden skal have en værdi eller flere at arbejde med. Da dette ikke er tilfældet i vores program, er der ikke defineret nogen parametre.

Inde i metoden Main har vi 1 linie:

Fold kodeboks ind/udKode 


Console er et objekt der skal repræsentere din skærm. Console klassen er defineret i det namespace der hedder System (ligesom vi har vores namespace, der hedder CSharpIntroduction), Console er så klassen inde i det namespace der hedder System (ligesom vi har en klasse i vores namespace, der hedder MainClass). Console klassens fulde navn bliver altså derfor:

Fold kodeboks ind/udKode 


Ligesom vores MainClass klasse, vil have det fulde navn:

Fold kodeboks ind/udKode 


Console klassen har en metode kaldet WriteLine, hvilken er defineret med nøgleordet static, som jeg tidligere skrev, betyder dette at vi kan benytte os af metoden, uden først at oprette et nyt objekt af klassen. Denne metodes fulde navn, bliver altså derfor.

Fold kodeboks ind/udKode 


Læg mærke til at vi benytter os af .-operatøren (dot operator) imellem hvert led.

Metoden WriteLine tager imod en parameter, nemlig den string af tekst, som du ønsker at skrive. Dette er blot en af de måder hvorpå man kan benytte sig af metoden WriteLine. Muligheden for at give samme metode en eller flere, ens eller forskellige parametre kaldes method overloading. Endnu et begreb som er en hel del mere avanceret en hvad denne artikels formål er.

Hvis du benytter dig af mange metoder fra det namespace der hedder system, kan du i starten af din kode skrive:

Fold kodeboks ind/udKode 


dette fortæller compileren at mange af de objekter du refererer til, er inde i det namespace kaldet System. Dette sparer dig for at skrive en hel del tekst, og du vil derfor kunne kalde metoden WriteLine, uden at skrive System foran, som vist her:

Fold kodeboks ind/udKode 


Husk på! At du dog ikke kan benytte dig af using, til at fortælle compileren af du benytter dig af System.Console, da Console er en klasse, og ikke et namespace.

Læg mærke til at enhver erklæring afsluttes med semikolon, dette gøres for at fortælle compileren hvorhenne din erklæring skal afslutte.

De næste linier kode, indikerer hvor henholdsvis din funktion Main slutter, din klasse MainClass slutter, og dit namespace CSharpIntroduction slutter.

Hvis vi benytter os af at fortælle compileren at vi ofte bruger objekter fra det namespace kaldet System, vil vores kode se således ud.

Fold kodeboks ind/udKode 


Jeg håber at denne artikel har været med til at hjælpe dig på vej med at komme i gang med C#. Jeg vil ikke på nuværende tidspunkt udelukke at jeg har intentioner om at følge op på denne artikel, og udvide emnerne lidt mere, men lad os nu se hvad tiden bringer.

Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (9)

User
Bruger #2959 @ 28.01.05 15:30
Meget flot og grundig artikel, hvor du beskriver eksemplet, du bruger, på et forståeligt plan! Keep up the good work!
User
Bruger #2034 @ 29.01.05 09:32
Dine forklaringer virker meget logiske, og som Chadi nævner er det let at forstå.
Jeg håber i hvert fald at du skriver yderligere artikler inden for dette sprog.
User
Bruger #4003 @ 14.02.05 13:40
Rigtig god introduktion til C#. Dog synes jeg der mangler en enkelt ting set i forhold til, at det er en begynder artikel del #1. Det er en kort introduktion til datatyperne/variable. Du nævner strings flere gange, men beskriver dem ikke...ok de fleste herinde ved nok hvad du snakker om, men i teorien skal artiklen jo kunne læses af en, der aldrig har programmeret før ;-)
User
Bruger #7468 @ 03.04.05 21:46
Dejligt at en newbi kan starte her

geen
User
Bruger #2673 @ 08.04.05 21:11
Ufattelig god artikel, fik jeg til at forstå lidt mere af det grundlæggende end af den bog jeg har købt. Du burde sgu skrive en bog om det :)

Keep up the good work vil jeg også have lov at sige :)
User
Bruger #2730 @ 26.04.05 15:27
Nøgleordet static betyder at man kan få adgang til denne metode, uden først at oprette et nyt objekt af klassen. Brugen af static i metoder, udover i Main, er meget avanceret, og jeg vil derfor ikke komme ind på det i denne artikel.


Næsten rigtigt! static betyder at der kun at eksistere een metode / variabel på tværs af alle instanser af dette objekt. Det vil sige at det aldrig vil give mening at kalde denne metode på et instantieret objekt.... men det er bagateller :-)
User
Bruger #10877 @ 17.11.06 18:38
Flot artikel. Undres bare over hvorfor programmet ikke virker bagefter :S Her er den kode jeg kom frem til:

Fold kodeboks ind/udKode 


Det er ikke den samme du har, men jeg har fulgt din guide, og mener at det er det her du siger til mig. Den giver mig fejl der ved " static void Main()"

Jeg prøvede også det med Using System; men det virkede heller ikke.

Så prøvede jeg at kopiere hele din kode... Det virkere heller ikke...
nogen der kan forklare mig hvorfor?


MVH
Dennis

User
Bruger #8985 @ 11.04.07 18:14
Er du sikker på, det ikke virker? Hvis din kode blev omskrevet til C++ (som jeg ved mere om end C#) ville det virke, men programmet ville lukke ned med det samme. Det er måske samme problem du har nu; du når ikke at se programmet køre. Desværre ved jeg ikke hvad man kan gøre mod dette i C#.
User
Bruger #11496 @ 19.12.07 14:00
@Dennis

Du har sikkert fundet en løsning. Men hvis andre har samme problem med at konsolen lukker inden man når at se programet, kan man skrive denne kode i sluningen af programmet:
Console.ReadLine();
Så venter programmet på at det skal læses noget.

Håber det hjælper
Du skal være logget ind for at skrive en kommentar.
t