Avatar billede iceyblue Nybegynder
19. marts 2004 - 18:26 Der er 6 kommentarer og
1 løsning

Genbrug af klasser

Hejsa...

Jeg arbejder på en C# form...nu vil jeg jo gerne lave det lækkert, således at div. klasser/metoder jeg laver kan genbruges!

Jeg har flere konstruktører i div. klasser, som modtager en ref.(this) fra en anden klasse, som opretter denne klasse....

eks.

I klasse1:
-----------

Klasse2 k2 = new Klasse2(this);


I Klasse2:
-----------

Klasse1 kl;

public Klasse2(Klasse1 k)
{
    K1=k;
}

k1.MetodeIKlasse2();

1. Hvordan løser jeg problemet i overstående eks. : At Klasse2's konstruktør forventer at den modtager en ref. af typen Klasse1?? Man må da kunne lave dette dynamisk...således at den kan modaget alle slags klasser, forms osv...??

2. Derudover...Hvordan laver jeg smartest en form genbrugelig...det der gør det sværrere i denne situation er jo...at det ikke bare er en normal klasse med en metode, som blot returnerer det der nu engang var relevant efter et kald...I en form/event-basseret-klasse er det lidt sværre pga. en given metode jo først skal kaldes/udføres når den pågældende event indtræder...

Håber meget i kan hjælpe mig!!

mvh. IceyBlue
Avatar billede arne_v Ekspert
19. marts 2004 - 18:30 #1
Re 1)

Du laver et interface med de metoder der skal bruges i klasse 2. Så bruger
du interfacet overalt i klasse 2. Og du lader så bare alle de klasser
der skal bruges på den måde implementere det pågældende interface.

re 2)

pas
Avatar billede arne_v Ekspert
19. marts 2004 - 18:37 #2
trivielt eksempel:

using System;

public interface AnyC
{
    void doit();
}

public class C1 : AnyC
{
    public void doit()
    {
        Console.WriteLine("I am a 1");
    }
}

public class C2 : AnyC
{
    public void doit()
    {
        Console.WriteLine("I am a 2");
    }
}

public class Tester
{
    private AnyC c;
    public Tester(AnyC c)
    {
        this.c = c;
    }
    public void test()
    {
        c.doit();
    }
}

class MainClass
{
    public static void Main(string[] args)
    {
        Tester t1 = new Tester(new C1());
        t1.test();
        Tester t2 = new Tester(new C2());
        t2.test();
    }
}
Avatar billede iceyblue Nybegynder
19. marts 2004 - 19:00 #3
Arne jeg tror du har misforstået mit spg....dit eksempel vil simplificerer objektet i tester klassen...til en iterface type...og samtidig kalde den rigtige metode i de 2 klasser....smart hvis man har brug for det...men det har jeg ikke..

Jeg skal kunne sende en ref. til én klasse og den skal evigt og altid kun udfører det der er def. i denne klasse - som modtaget instansen (og ikke som i det eks. hvor den kalder metoden efter hvilket klasse den oprindligt kommer fra)...

Problemet er at den jo også skal kunne sende/returnerer et givet resultat tilbage igen til klassen, formen...altså this...som har brug for dette resultat...
Avatar billede arne_v Ekspert
19. marts 2004 - 19:05 #4
Det er dine forme som jeg vil lave implementere et interface, således
at du kan kalde den samme constructor med this fra forskellige klasser.

Er det ikke det du vil ?
Avatar billede iceyblue Nybegynder
19. marts 2004 - 20:00 #5
jo...det er ! og jeg tror også det er mig der sover ;)...tænkter lige lidt mere over det...så vender jeg tilbage...enten med endnu et spg. eller for at give dig points...hehe...:)

har lige tænkt lidt...*lol*

...Det her vil da også virke - selvom man benytter det i en event-klasse! det ændrer jo intet at det benyttes i en event klasse eller ej...
Avatar billede iceyblue Nybegynder
19. marts 2004 - 22:39 #6
Hej igen...det virker sgu...:)

Blot til dig oplysning...så er det jo ligemeget om  "public void test()" fra dit eksempel er en normal metode eller en event-metode...den kan jo sagtens kalde den rigtige metode fra interfacet alligevel ;)
Men man er selvfølgelig nød til at benytte interfaces, da det ikke kan lade sig gøre ved blot at returnere en værdi på normal vis...

Det er bare skyiide smart - med de der interfaces...kendte godt til det...men have ikke lige vinklet den rigtigt...

tak fordi du viste mig regnbuen endnu en gang ;)

mvh. IceyBlue
Avatar billede arne_v Ekspert
19. marts 2004 - 22:47 #7
Herligt at det virker.

Så vil jeg ligge et svar.
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