01. september 2004 - 22:21Der er
10 kommentarer og 1 løsning
sende class som parameter til en anden class.
For noget tid siden var arne så flink og skrive dette eksempel til mig. Og det virker fint hvis det er MainForm jeg sender som parameter, men hvordan gør jeg hvis jeg vil sende en almindelig class som parameter til en anden class ? hvis man kan ? Har prøvet at skifte typen MainForm ud med myClass i stedet for som class´en kunne hedde, men ser ikke ud til at virke...
Her er koden fra arnes gamle eksempel:
HelperClass hc = new HelperClass(this); hc.doit();
fra main form laves der en helper klasse med en reference til main formen.
public class HelperClass { private MainForm mf; public HelperClass(MainForm mf) { this.mf = mf; } public void doit() { mf.setLabel1(DateTime.Now.ToString()); } }
Håber i kan hjælpe. Og spørg endelig hvis der er noget jeg skal forklare.
grunden til at det eksempel du har virker, er fordi this (i den første kodelinie) er af typen MainForm).
giver det mere mening for dig, hvis du ser sådan et eksempel som dette istedet :
public class SomeClass { public SomeClass() { } }
public class SomeOtherClass { private SomeClass someClass;
public SomeOtherClass(SomeClass someClass) { this.someClass = someClass; } }
ovenstående klasser gør ikke en disse, men det er bare for eksemplet. for at få dem begge i sving, kunne du skrive sådan her :
// du kan oprette en forekomst af SomeClass uden at skrive noget imellem () fordi den constructor der er angivet i klasse ikke kræver nogle parametre. SomeClass someObject = new SomeClass();
// SomeOtherClass kræver til gengæld et objekt af typen SomeClass som parameter, hvorfor vi må give den sådan en. SomeOtherClass someOtherObject = new SomeOtherClass(someObject);
Men ... fordi du ønsker at behandle en bestemt type, i en bestemt klasse, er det ikke nødvendigvis det rigtige at oprette klassen med en sådan type som parameter (altså kræve den i cunstructoren)... Du kan også bare have en metode på klassen der tager en sådan, og gør et eller andet udfra det.
public class StarPacker { public StarPacker() { }
public string PackInStart(string someString) { return "*" + someString + "*"; } } (StarPacker-klassen er bare et eksempel - ikke en anbefaling til at løse en sådan opgave).
objektorienteret programmering (OOP) er en lidt halvstor sag - og nok lidt for stor til lige at ridse op herude, men du kan muligvis læse lidt af ovenstående.
hvis du skriver hvad du sådan lidt mere konkret, hvad du har behov for - skal jeg gøre mit bedste for at hjælpe.
fedt nu havde jeg lige skrevet en hel noman, så kom jeg til at trykke tilbage ;) Men prøver igen.. :)
prøver lige at skrive det som jeg havde lavet det.
Jeg har en MainForm class(som indeholder en knap som åbner en instans af GameEngine), GameEngine og GameMap.
public class GameEngine { public GameEngine() { } GameMap newGameMap = new GameMap(this); } public GameMap { private GameEngine gm; public GameMap(GameEngine gm) { this.gm = gm; } }
Er det fordi jeg sender MainForm med som reference i stedet for GameEngine som jeg regner med ??
nej ge og ge2 er bare to forekomster af samme type... og har lige så meget med hinanden at gøre som : string hej ="hej"; string meddig ="meddig";
grunden til at du kunne kalde uden at instantiere et objekt er, at du som udgangpunkt er i en "levende" instans af klassen, hvilket er hvad this refererer til.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.