Avatar billede arcanex Nybegynder
01. september 2004 - 22:21 Der 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.
Avatar billede snepnet Nybegynder
01. september 2004 - 22:49 #1
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.

mvh
Avatar billede arcanex Nybegynder
01. september 2004 - 23:28 #2
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 ??
Avatar billede arcanex Nybegynder
01. september 2004 - 23:29 #3
Det er selv. ge til sidste i koden :)
Avatar billede arcanex Nybegynder
01. september 2004 - 23:29 #4
hold da op som jeg staver :)

Roman er det self :D:D
Avatar billede snepnet Nybegynder
01. september 2004 - 23:30 #5
jeps - det er lige nøjagtig derfor.
Avatar billede snepnet Nybegynder
01. september 2004 - 23:32 #6
hehe... ja nogle gange for man skrevet det værste volapyk herude :o)
du skal lave dig en ny GameEngine for at sende den med :

GameEngine ge = new GameEngine();

Så kan du oprette et GameMap med
GameMap gm = new GameMap(ge);
Avatar billede arcanex Nybegynder
01. september 2004 - 23:39 #7
ahh okay.. Nu er jeg med, men hvorfor kunne jeg så sende MainForm med i det første eksempel uden at skulle oprette et nyt object først ?
Avatar billede arcanex Nybegynder
01. september 2004 - 23:40 #8
GameEngine ge = new GameEngine();
GameEngine ge2 = new GameEngine();

disse to har da ikke noget med hinanden at gøre har de ??
Avatar billede snepnet Nybegynder
01. september 2004 - 23:45 #9
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.
Avatar billede arcanex Nybegynder
01. september 2004 - 23:57 #10
Okay så er jeg med :)
Men jeg siger mange tak for svarene, smid et svar så venter der 100 point ;D
Avatar billede snepnet Nybegynder
02. september 2004 - 07:46 #11
svar :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester