Brugernavn:




Kodeord: Husk
Forside Forum Artikler Downloads Søg
 

Basal C#


Hej Rowl’ere.

Så kom der endnu en artikel fra min side af. Denne gang blev sproget C#, da Rowl endnu ikke har nogle artikler omhandlende dette. Før vi går i gang skal du have installeret en C# compiler, så din C# kode kan omdannes til rigtige programmer. Det er en god idé at downloade en IDE også, så dit arbejde bliver lettet lidt. Heldigvis kan begge downloades i én pakke hos microsoft: http://msdn.microsoft.com/vstudio/express/downloads/default.aspx

… Gratis.

Når du har installeret den er du sådan set klar, men det kan være en god idé lige at registrere den først. Dette skal gøres inden 30 dage, og tager kun nogle få minutter. Registreringen vil ikke blive gennemgået i denne artikel, da det sådan set bare er at udfylde en masse formularer og lignende.

Start Visual C# op, tryk på ”File” og vælg ”New Project…” (Ctrl+Shift+N).

På min skærm ser det sådan her ud:


Nu skulle programmet vise et vindue med titlen ”Form1”. Det var så opsætningen, nu er vi klar til programmeringen, og den vil der virkelig komme noget af. Vi starter helt fra bunden, og gennemgår kun det mest basale. Derfor bliver det selvfølgelig utroligt simpelt, men det er også det bedste niveau at starte på, for så derefter at udvide og udvide.

Indholdsfortegnelse
- Om C#
- Ordbog

Om C#
C# er et objektorienteret programmeringssprog ligesom C++, men der er dog visse åbenlyse forskelle. C# er hvad man vil kalde et low-level sprog, hvorimod C++ er et high-level sprog. Disse termer er forklaret i ordbogen. C# er et moderne sprog udviklet af Microsoft, som gør det let at udvikle applikationer. Den eneste hage ved det er dog, at Microsoft’s .NET framework skal være installeret for at man kan benytte disse programmer, men det er vist de færreste, der ikke har det. Du kan læse meget mere om C# på Internettet.

Programmeringsmetode
Som tidligere nævnt er C# OOP, og der bruges derfor objekter som funktioner og klasser til at styre programmet. Det er vigtigt at forstå visse koncepter inden man begiver sig ud i programmeringen, så det vil jeg lige prøve på.

OOP kommer i mine øjne i tre lag. I første lag har man en masse variabler og funktioner. I andet lag har man en masse klasser. Disse klasser indeholder ens variabler og funktioner. I tredje lag kommer ens namespace. Namespace’et indeholder alle ens klasser. Det kan illustreres sådan her:


I C# bliver alle tre lag anvendt hele tiden. Så snart du opretter et projekt vil der blive defineret et namespace og en klasse. Namespace’et vil ofte hedde det samme som dit projekt, så IDE ved, hvad den skal arbejde med, og ligeledes hvad den skal kompilere. Et namespace kan godt indeholde andet end klasser, men det ses sjældent, især i C#. Et namespace er altså bare en boks, hvori du putter dine forskellige objekter. Der er også en anden smart ting ved namespace’s, som jeg lige vil nævne. Normalt kan du kun have en klasse ved navn ’A’, i din kode. Hvis du opretter to namespaces, begge med klassen ’A’ i, vil du ikke få en nogen fejl. Du skal blot vælge hvilket namespace du vil arbejde med, og den pågældende A-klasse vil blive brugt. Nok om det, videre.

Denne artikel vil kun nævne få af de simpleste aspekter i C#, da meget er medtaget fra ældre programmeringssprog. Den er henvendt til folk, der har erfaring med programmering, men som godt vil have noget grundlæggende viden at arbejde videre på. Du vil ikke lære at lave hverken simple eller avancerede programmer, men kun lidt kode, samt brug af IDE’en. I bund og grund vil du kun lære at opfange et klik på en knap, samt lidt om brug af funktioner mm.. Jeg håber, du har læst disse få linier, inden du bedømmer artiklen.

Så kører programmet
Tryk F7 for at se koden bag din nuværende fil. Koden skulle gerne se sådan her ud:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;

  8. namespace WindowsApplication1
  9. {
  10.     public partial class Form1 : Form
  11.     {
  12.         public Form1()
  13.         {
  14.             InitializeComponent();
  15.         }
  16.     }
  17. }
Der ser du; koden har både et namespace og en klasse. Tryk F5 for at kompilere og køre dit program. Så vidt så godt, nu skal vi bare lige forstå koden. Namespace’t og klassen har jeg allerede forklaret. De første syv linier vil jeg heller ikke forklare, det er bare hvilke namespace’s vi bruger. For at gøre det lidt let at forstå, kan du sammenligne C#’s using med PHP’s include.
  • public
Dette er endnu en vigtig ting ved klasser. Det definerer hvem der har adgang til klassen, så at sige. Hvis klassen er public, altså offentlig, kan alle komme og bruge den. Med alle mener jeg andre klasser. Hvis den er protected, beskyttet, er det kun den selv, og den klasse, den nedarver til, der kan bruge den. Jeg vil ikke forklare hvad der menes med at ’nedarve’, for det kræver ikke andet end 3 sekunder på Google, hvis dit Internet er nogenlunde godt. Hvis den står på private, er det kun klassen selv, der har adgang til dens variabler og funktioner.

  • partial
Partial betyder ’delvis’. Når en class er partial betyder det blandt andet, at den kan defineres i mere end én fil. Jeg forstår desværre ikke rigtigt hvorfor dette er nyttigt, da jeg altid definerer mine klasser i samme fil, men igen, søg på Google.

  • Form1 : Form
Form er selve vores win32 form, altså ’programvinduet’. Den er public; derfor kan Form1 nedarve fra den (hertil bruges semikolonet). Hvis den var private ville det ikke være muligt for andre klasser at nedarve fra den. Når vi nedarver, betyder det egentlig bare at vi henter alt hvad den indeholder ind i vores nye klasse, så vi får adgang til det igennem den.

  • public Form1()

Dette er vores konstruktør. Den SKAL hedde det samme som vores klasse, ellers er det ikke en konstruktør. En konstruktør bliver kaldet som det første objekt, når klassen bliver brugt. InitializeComponent() er en funktion, og du kan læse hvad den gør på Google eller http://msdn.microsoft.com

Så er koden gennemgået, men den skal selvfølgelig udbygges, for at vi kan få programmet til at gøre noget. Alt hvad programmet skal gøre, skal puttes ind i funktioner. For eksempel kan du ikke bare bede den om at vise en popup i klassens lag, det SKAL være i funktionens.

Vi snakkede om en popup før. Den vil vi prøve at lave nu. Den skal vise beskeden ”Nu er programmet oprettet”, lige når det bliver kørt. Så vi tilføjer:
  • MessageBox.Show("Så kører programmet");

... Hvilket resulterer i:


Det bliver din opgave at finde ud af hvor det skal placeres henne, men hvis du har læst grundigt indtil videre burde det ikke være noget problem overhovedet.

MessageBox er en klasse, og Show er en funktion. Det er jo simpelt nok. Nu vil vi til at bruge noget, vi kender fra andre sprog. Vi starter med IF-konstruktionerne.
  1. namespace WindowsApplication1
  2. {
  3.     public partial class Form1 : Form
  4.     {
  5.         private string Navn = "Jens Hansen";
  6.         public Form1()
  7.         {
  8.             InitializeComponent();
  9.             if (Navn == "Jens Hansen")
  10.             {
  11.                 MessageBox.Show("Du har en bondegård");
  12.             }
  13.             else
  14.             {
  15.                 MessageBox.Show("Hvem er du??");
  16.             }
  17.         }
  18.     }
  19. }

Sådan skal vores namespace se ud nu. Vi laver en streng (variabler kan godt være udenfor funktioner, da de er i samme ’lag’). For at være egoistiske gør vi den privat; vi vil ikke have andre klasser til at benytte sig af den. C# sammenligner værdier på samme måde som PHP og C, altså med dobbelt lighedstegn. Koden burde være til at forstå, men vi giver den lige en gennemgang alligevel. Hvis variablen Navn har værdien ’Jens Hansen’, går vi ind i klassen MessageBox, og bruger dens funktion Show. Dette er endnu et godt eksempel på forskellen på private og public. Hvis Show-funktionen var private, ville vores klasse (Form1) ikke kunne benytte den. Vi ville heller ikke kunne bruge den hvis den var protected, da vi ikke nedarver fra den (Klasse1 : Klasse2). Hvis Navn ikke er ”Jens Hansen” ryger vi ind i vores ELSE-konstruktion, og vi spørger, hvem vedkommende er.

Løkker
C# understøtter alle de løkker, du kender fra PHP, og syntaksen er fuldstændig den samme, så dem vælger jeg at springe over.

Du har lært om namespaces, klasse og konstruktører. Du har også lært at lave variabler og benytte funktioner. Løkker bør du allerede kende. Nu mangler vi bare funktioner, og så lidt om IDE’en, resten er faktisk bare at lege med programmet, så kommer det alt sammen af sig selv, og jeg kan af erfaring sige, at det kommer hurtigt.

Vi opretter en lille funktion til at lægge to tal sammen. Denne funktion kalder vi ’plus’.
Vores namespace ser nu sådan ud:
  1. namespace WindowsApplication1
  2. {
  3.     public partial class Form1 : Form
  4.     {
  5.         private int plus(int a, int b)
  6.         {
  7.             return a + b;
  8.         }
  9.         public Form1()
  10.         {
  11.             InitializeComponent();
  12.             MessageBox.Show(plus(5, 5).ToString());
  13.         }
  14.     }
  15. }
Nu er vi faktisk allerede ude i det lidt mere avancerede, men det burde stadig være meget enkelt at forstå, efter denne lille forklaring.
  • private int plus(int a, int b)
private kender du.
’int’ står for ’integer’, som betyder ’tal’ eller ’nummer’. Denne type burde du kende, men den kan altså kun indeholde et heltal. Dvs. den må ikke indeholde bogstaver eller decimaltal (10.3, fx).
’plus’ er navnet på vores funktion, og den tager to parametre, begge to af typen int. ’a’ og ’b’ er navnene på vores parametre.
Vi starter og slutter vores funktion med henholdsvis { og }, ligesom med vores klasse og namespace.
Vi bruger return til at smide en værdi tilbage, når funktionen kaldes. Denne værdi skal være de to tal lagt sammen, derfor bruger vi operatoren ’+’. Vi kunne ligeledes have brugt -, *, /, %, |, &, <<, >>, ^, ~ og xor til at udføre noget matematisk, men det kan du altid lege lidt med.

Takket være vores return-konstruktion, vil plus(2, 3) altid blive erstattet af 5.
Nu har vi funktionen, så skal vi have den smidt i en popup.
  • MessageBox.Show(plus(5, 5).ToString());
Vi er nødt til at tilføje ‘.ToString()’ for at tvinge vores resultat til at være en streng, da Show-funktionen kun modtager strenge. Ellers ville vores IDE brokke sig, og komme med en eller anden grim fejl, hvilket vi selvfølgelig ikke er interesserede i. På alle typer oprettes automatisk en .ToString metode.
  1. int X = 16;
  2. X.ToString();
Dette ville eksempelvis kunne lade sig gøre.
Nu har vi været funktionerne igennem også, om end det var en lidt kort gennemgang, men det er let at udbygge koderne herfra, og dermed også sin viden omkring det.

Nu skal vi oprette en simpel knap på vores form, og den skal vise en popup, når vi trykker på den. åben fanebladet ’Form1.cs [Design]’, og kig ude til venstre. Menupunkt nummer 5 fra oven skulle gerne hedde ’Button’. Lav en Drag ’n’ Drop med den på din form, og den vil blive placeret på den. Kig nu ude til højre, nederst. Nu er der kommet en liste med navnet ’Properties’. Rul ned og vælg ’Text’, og skriv ’Tryk her’. Teksten på din knap vil nu blive ændret.
Sådan ser det nu ud hos mig:

Dobbelt-klik på din knap, og du vil se koden til dit program endnu engang. Nu skulle der gerne være tilføjet
  1. private void button1_Click(object sender, EventArgs e)
  2. {

  3. }
object sender er en parameter af typen ’object’, som indeholder det objekt, der kaldte funktionen. Denne vil jo så i dette tilfælde altid være vores knap, så den parameter bruger vi ikke. EventArgs e er en parameter af typen ’EventArgs’. Denne type indeholder de ekstra forespørgsler der blev sendt, da funktionen blev kaldt. ’e’ vil for eksempel indeholde en tast på tastaturet, hvis vi havde en ’onKeyPress’ funktion, men dette vil ikke blive gennemgået i denne artikel. ’e’ bruger vi heller ikke i dette eksempel, da vi bare ønsker at vise en popup. Så i funktionen skriver du:
  • MessageBox.Show(plus(5, 5).ToString());
Popup’en vil nu ikke blive kaldt i samme øjeblik som programmet bliver oprettet, men i stedet når vores knap bliver trykket på. Tryk F5 for at køre dit program, og tjek om det virker. Det gør det hos mig, og det burde det også hos dig. Du har nu lavet dit første (meget simple) program i C#. Jeg vil måske skrive flere artikler end denne, måske ikke, det afhænger meget af hvor populær denne bliver. Så vidt jeg ved er der ingen C# programmører på Rowl, men det er absolut et dejligt og effektivt sprog. Jeg har før fristet Rowl’ere til at programmere i Delphi, og jeg håber min artikel har samme virkning denne gang, da jeg faktisk synes C# er en del mere håndterligt og praktisk end Delphi.

Ordbog
Low-level og High-level: Læs v0ids kommentarer til artiklen.

OOP: Står for Objekt Orienteret Programmering, altså programmering der benytter sig af objekter (fx. klasser).

Private: Kan kun benyttes af samme klasse
Protected: Kan kun benyttes af samme klassefamilie.
Public: Kan benyttes af alle klasser.
Partial: Delvis.

Namespace: Programstruktur til at holde styr på kodeenheder.

Int: Integer, tal
String: Streng
Void: Tom datatype. Funktioner, der er sat til void, må ikke returernere en værdi. Bruges specielt ved events.
IDE: Forkortelse for Integrated Development Environment, altså et ’integreret udviklingsmiljø’. Normalt kalder vi det en editor.

Jeg håber jeg fik det hele med, ellers er I velkomne til at oprette en kommentar.
Sidst redigeret 16:52 - 20/04/2007
Oprettet af:

Diverse

Point modtaget: 0

Rate:
15:39 19/04/2007

Kommentarer

Giv din mening tilkende om denne artikel, eller læs andres.
Har du spørgsmål eller brug for hjælp til denne artikel henvises du til forummet.
Ser rigtig godt ud ;) Tænk det er så nemt.. Det ligner jo php på en prik :)
Oprettet af:
  Mail
16:04 19/04/2007
Ja de minder faktisk en del om hinanden :D
Oprettet af:
  Mail
17:35 19/04/2007
Fint at der kom en C#-artikel.
Der var nogle ting der faldt mig i øjnene med det samme.

En ting, som jeg synes at du skal have styr på, er low-level og high-level-termerne, som du slet ikke har styr på. Jeg tror at du tænker på det omvendt. C# er nemlig dybt high-level, og ikke C++. Termerne er relative, så det er svært at sige præcist hvad et sprog er - man løser normalt dette lille "problem" ved at sammenligne sprog. På denne måde kan vi sige at C++ er meget mere low-level end C# er. Men igen kan man så sige at C er mere low-level end C++, og at Assembly er mere low-level end C, osv. osv.

Et bevis på at C# er ekstremt high-level (dog ikke så meget som f.eks. Visual Basic) har du faktisk i din artikel. Det er omhandlende dine MessageBoxes. Der skal utroligt lidt kode til at lave sådan en messagebox i C#, som du viser. I C++ er det overhovedet ikke muligt at lave sådan en MessageBox, medmindre man gør brug af et tredjeparts framework, der i sig selv intet med sproget har at gøre. Hvis man f.eks. gør brug af Win32API"et (der i øvrigt ikke er C++, men i C-kode) skal der mere kode til en messagebox, dog kan det også være på en linje, men man får mere kontrol over det, da man kan give det flere parametre. Hvis man derimod kigger på Assembly, så er det straks sværere. Hvis man også her vælger at gøre brug af Win32API"et, så skal der 5 linjer til at lave den samme kode.

Personligt kan jeg bedst lide at arbejde med low-level sprog, såsom Assembly og C, men også C++. Det eneste sprog jeg har arbejdet med, som var en del high-level er Python. Men ellers har jeg aldrig lært, og ønsker det heller ikke, at komme igang med f.eks. Visual Basic. (Skal lige siges at alle webprogrammeringssprog er stortset high-level, så der var en lille undtagelse også ).

Jeg synes, udover alt det^, at du har skrevet den på en fin måde, som jeg tror at de fleste nybegyndere vil kunne følge med i. Specielt synes jeg det er godt at du fortæller om programmet, og hvordan man bruger dette. Det er ofte kompileren, interpreteren eller editoren som nybegynderne har svært ved at komme igang med.
Sidst redigeret 07:00 - 20/04/2007
Oprettet af:
  Mail
06:59 20/04/2007
v0id > Tak for din kommentar. Angående det med lowlevel og highlevel har du med garanti ret, jeg skrev bare hvad jeg havde fået at vide af andre. Jeg gik ud fra, at mere kode (som giver flere muligheder) var lig med at sproget var high-level, og som du selv siger kræver det langt mere kode at lave fx en MessageBox i C/C++.

Kan du ikke konkret sige hvad jeg skal skrive i stedet? Så vil jeg straks rette det.
Oprettet af:
  Mail
13:51 20/04/2007
Det er svært præcist at sige, da det, som jeg skrev i mit indlæg før, er meget relativt. Kig i mit indlæg før, der vil nok stå mest omkring det. Men kort sagt så kan man vel sige det; Jo mere low-level, jo mere kontrol. Og så kan man selvfølgelig vende den om; Jo mere high-level, jo mindre kontrol.

Igen vil jeg sige, godt skrevet - og forsæt i den stil.
Oprettet af:
  Mail
15:43 20/04/2007
Okay, ja så må jeg vist have misforstået det en del. Jeg troede faktisk det var lige præcist omvendt. Så refererer jeg bare til dine kommentarer i ordbogen.

Mange tak skal du have (:
Sidst redigeret 16:53 - 20/04/2007
Oprettet af:
  Mail
16:50 20/04/2007
v0id > Når du siger Assembly, snakker vi så om Assembler? Det lyder som sådan. Jeg har en i familien Microsoftprogrammer i familien, og han siger, Assembler er meget highlevel, da det snakker direkte med Hardwaren. Altså endnu mere highlevel end C og C++, så vidt jeg forstod det.
Oprettet af:
  Mail
21:07 30/04/2007
Nu bytter du igen om på begreberne :-)

Assembly er mere low-level end f.eks. C og C++ er, meget endda. I Assembly er det muligt at "snakke" direkte med hardwaren, BIOS, osv. Dette kræver også en ekstrem viden for det system man koder sit program på. Hvis du f.eks. koder et assembly kode på et system med Windows XP, er det ingengang sikkert at det kan køre på et andet system, også med Windows XP.

Læg mærke til at jeg siger "Assembly", det er nemlig det selve sproget hedder. "Assembler" er det værktøj man bruger til at assemble ens kode, så det bliver til maskingkode. Mange bytter mange gange om på de to begreber.

High- og low-level bliver ikke kun brugt i programmering, men generelt om alting. En mere detaljeret forklaring kan du finde her:
http://en.wikipedia.org/wiki/High_and_low_level_%28description%29

Og nu da det handler om programmering, skal du nok også se her:
http://en.wikipedia.org/wiki/High-level_programming_language
http://en.wikipedia.org/wiki/Low-level_programming_language
Sidst redigeret 08:10 - 11/05/2007
Oprettet af:
  Mail
08:09 11/05/2007
Du skal være oprettet og logget ind for at kommentere en artikel
Copyright © Rowl.dk v/ Michael Raagaard | 2005-10 | Alle rettigheder forbeholdes