Jeg prøver igen. Hvad er Klasser?!

Tags:    c#

Hej igen.

Jeg forstår stadig ikke hvad klasser er!:(
Hvis i kunne forklare hvad det er, så ville jeg blive meget glad!
Så her har jeg et spørgsmål...
Se lige den her kode:
Fold kodeboks ind/udCSharp kode 

Er Det ikke godt nok strengene: "fornavn" og "efternavn" der påvirker den anden del af koden?

Mvh

Andreas

I kunne hjælpe mig SÅ MEGA meget hvis I svarer på det :D



En fil indeholder et namespace (eller flere), et namespace indeholder classes og classes (kan) indeholde(r) funktioner og variabler.

Hvis variabler defineres uden for en funktion kaldes og bliver de til globale variabler da de kan bruges i flere funktioner.

Et eksempel er:
namespace MitNameSpace
{
class MinClass
{
string minStreng2; // Denne variable er global da den oprettes i min class MinClass
private void MinFunktion(string streng)
{
string minStreng; // Den variabel er lokal da den oprettes indenfor min funktion MinFunktion
Console.WriteLine(streng);
}
private void MinFunktion2()
{
// Ændring af den globale variable minStreng2
minStreng2 = "Noget helt nyt";
}
}
}

Dvs. jeg kan godt få fat i minStreng2 fra MinFunktion2 men jeg kan ikke få fat i minStreng da den kun eksister i minFunktion



Indlæg senest redigeret d. 04.12.2008 18:03 af Bruger #11386
Jeg tror at lidt af forvirringen skyldes at man i C# og Java misbruger klassebegrebet ved at forlange at ALTING er klasser. I mere realistiske sprog som C++ og Python er koden et mix af funktioner og klasser.

Jeg ved stort set intet om C# så følgende er en generel beskrivelse af klasser.

I et program har man variabler, man kunne f.eks. forestille sig at man havde brug for at gemme et navn:
string navn;

Typen er "string" og "variablen" eller "objektet" er "navn", man siger også at navn er en instans af typen string.

Det er sådan set ligetil. Men man kunne også forestille sig at man havde brug for at gemme fornavn og efternavn hver for sig, så kunne man selvfølgelig:
string forNavn;
string efterNavn;

Min hvis man skal bruge dette 1000 forskellige steder i koden ville det være lidt bøvlet, og man har derfor siden computerens barndom fundet på at samle dette i en:

class Navn
{
string forNavn;
string efterNavn;
};
(Syntaxen varierer mellem sprog.)

Nu har vi lavet en ny type, "Navn", der er sammensat af to dele, "fornavn og "efternavn"

Vi kan så oprette et objekt/en variable af denne type:

Navn navn;
Her er "navn" variablen, "Navn" er typen.
Nu kan vi:
navn.forNavn = "Ole";
navn.efterNavn = "Petersen";

Og vi kan flytte rund på variablen som alle andre variabler:
Navn navn2 = navn;
Dvs. nu har vi et kopi af navn, der hedder navn2.

Ofte har man brug for at kunne nogle ting med sin type, udføre operationer på den. Det kan vi gøre ved at tilføje funktioner/operatorer/metoder til class'en:

class Navn
{
void Inlaes();
void Udskriv();
string forNavn;
string efterNavn;
};

Man kunne forestille sig at Indlaes læser et navn fra keyboardet, og Udskriv skriver til skærmen.

Derved bliver man i stand til at:

Navn navn;
navn.Indlaes();
Navn.Udskriv();

Som så vil gøre ca. det samme som dit program.

Så Navn fra ovenstående er netop en Klasse.

Oftest er en klasse en samling af variabler og funktioner der udfører en bestemt opgave i programmet og/eller modelerer et objekt ude fra virkeligheden.



Jeg vil anbefale dig at se videoerne

Object Oriented Programming Fundamentals - Part 1
Object Oriented Programming Fundamentals - Part 2

her:

http://www.learnvisualstudio.net/content/series/visual_csharp_2005_express_edition_for_beginners.aspx

(På engelsk).



Tusind tak skal I have!!
Det er så nice I har svaret på det, så nu har jeg endelig fundet ud af hvad det var:D

Der er lige et spørgsmål her:
[code lang"C#"]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Mitnamespace
{
class Minklasse
{
int nr1;

static void Minfunktion(string[] args)
{
}
}
}
[/code]
Som i kan se har jeg en Variable: "nr1".
Jeg ved bare ikke hvordan jeg skal få den ind i "Minfunktion".
Kan godt få det til at virke, hvis jeg opretter: "nr1", inde i "Minfunktion".
Her er der et eksempel:
[code lang"C#"]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Mitnamespace
{
class Minklasse
{
static void Main(string[] args)
{
int nr1;
nr1 = 34;

Console.WriteLine(nr1);

Console.ReadLine();
}
}
}
[/code]
Så hvordan gør man det?

Men eller tusind tak for den rigtig gode hjælp;)

Mvh

Andreas



Tusind tak skal I have!!
Det er så nice I har svaret på det, så nu har jeg endelig fundet ud af hvad det var:D

Der er lige et spørgsmål her:
Fold kodeboks ind/udCSharp kode 

Som i kan se har jeg en Variable: "nr1".
Jeg ved bare ikke hvordan jeg skal få den ind i "Minfunktion".
Kan godt få det til at virke, hvis jeg opretter: "nr1", inde i "Minfunktion".
Her er der et eksempel:
Fold kodeboks ind/udCSharp kode 

Så hvordan gør man det?

Men eller tusind tak for den rigtig gode hjælp;)

Mvh

Andreas



Nu ved jeg jo som bekendt ikke rigtigt noget om C#, men tillad mig at gætte.

Når noget i en class er "static" eksisterer der kun én af dem, denne er delt mellem alle instanser af klassen.

Noget der ikke er static eksisterer den en af for hver instans, af klassen.

Fra static funktioner kan man ikke komme til ikke static, fordi compileren ikke kan vide i hvilken udgave af klassen den skal lede efter variablen.

Hvis det er rigtigt, burde det hjælpe at skrive static foran din variabel, nr1. Eller du kan oprette en instans af klassen og tilgå variablen gennem denne instans.



Hvis du læser Casper Hansens post (den første) så har du svaret.

Jeg vil helt klart anbefale dig at se alle videoerne på den side jeg henviste til i min forrige post. Det er dér jeg selv er startet, og jeg kan som sagt kun anbefale det. :)



Hej igen.

Jeg lagde lige et eksempel op med hvordan det fungere http://peecee.dk/upload/view/143489

Og her er kildekoden:
Fold kodeboks ind/udCSharp kode 




Yes!

Sådan, så virker det! Tak Bertel :D

Og tak for rådet om video'erne:P

Mvh

Andreas



t