Toon posts:

[VB.NET] Vraag over interface and assemblies

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb alle forums doorgespit en alle tutorials en boeken nagekeken, maar weet het echt niet meer... ;(

Ik heb twee assemblies, laten we zeggen A.dll and B.dll. A.dll en B.dll bevatten cq. ClassA and ClassB.
In plaats van dat ClassA ClassB direct aanroept, zou ik dit graag willen doen via een interface.

Tot nu toe heb ik echter alleen kunnen uitvinden dat B.dll de interface moet realizeren (public interface MyInterface ... end interface). Verder heb ik begrepen dat ClassA de interface moet implementeren (public class ClassA implements MyInterface ...). Bovendien begrijp ik vaag dat ClassA ook de execution code moet definieeren voor de functions voorgeschreven door MyInterface (please correct me if I'm wrong).

En dan zit ik vast.

Ik heb geen flauw idee wat voor een rol ClassB (en haar functies) speelt in dit geheel :? (vooral als gezegd wordt dat ClassA de executie code definieert). Al dit terwijl ik uiteindelijk alleen maar graag wil dat ClassA ClassB aanroept om ClassB's functies te gebruiken.

Please Please Help!

Mr.Smiley

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 01-05 19:09

pjvandesande

GC.Collect(head);

Kijk dan is naar het Adapter pattern, dit heb je nodig. Wat jij nu wilt doe is Polymorphisme.

Verwijderd

Topicstarter
Maar wat bedoelen ze hiermee dan? :?



Of course, you know about your model's public interfaces by looking at your public functions in the classes. However, if you have a component representing a third-party DLL, you might not know about the public interfaces, because you haven't modeled the classes and functions. That's when the interface element of a component diagram can be useful.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09-05 08:08

Janoz

Moderator Devschuur®

!litemod

Je maakt een denkfout in je redenatie. Waneer je vanuit classA classB wilt aanroepen zonder dat je classB daadwerkelijk kent kun je inderdaad classA tegen een interface laten praten. Deze interface is vervolgens weer een apparte class. Binnen interfaceB worden vervolgens inderdaad de methoden gedefinieerd, maar niet geimplementeerd. De implementatie zit immers in classB. Het is dus niet classA die de interface implementeerd.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 27-08-2021

CaptBiele

No Worries!

interfaces lijken op abstract klassen, gezien het feit dat ze een soort template leveren om een nieuwe klasse te maken. Alleen interfaces leveren geen implementatie van class members. Eigenlijk zijn interfaces meer types dan klassen....

(ik weet niet of het iets bijdraagt, maar dat is het enige wat ik ervan weet :) )

Verwijderd

Topicstarter
Janoz schreef op donderdag 03 maart 2005 @ 12:04:
Je maakt een denkfout in je redenatie. Waneer je vanuit classA classB wilt aanroepen zonder dat je classB daadwerkelijk kent kun je inderdaad classA tegen een interface laten praten. Deze interface is vervolgens weer een apparte class. Binnen interfaceB worden vervolgens inderdaad de methoden gedefinieerd, maar niet geimplementeerd. De implementatie zit immers in classB. Het is dus niet classA die de interface implementeerd.
Thanks Janoz!

Dus mag ik concluderen dat een component met een "lollipop" in UML in feite zegt dat de "lollipop" de interface is, en dat classes in de component waaraan de lollipop (met een solid line) verbonden is de interface implementeren? En dat een andere component (met stippel lijn) verbonden aan de lollipop spreekt tegen de interface?

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:45
Wat jij moet doen, is zoals Janoz zegt:

Maak een assembly waar je die interface in definieert.
Zorg ervoor dat zowel A.dll en B.dll die interface kennen (een reference er naartoe hebben).

ClassA kan je dan tegen die interface laten praten, en ClassB moet die interface implementeren:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class  ClassA
{
    public void TalkTo()
     {
          Assembly asm = ....  // laad hier de B.dll assembly;
       
          IMyInterface m = (IMyInterface)asm.CreateInstance ( ..... );

          if( m == null ) 
             throw new ApplicationException ("could not create");

          m.SaySomething;
 
     }
}

https://fgheysels.github.io/


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 01-05 19:09

pjvandesande

GC.Collect(head);

whoami schreef op donderdag 03 maart 2005 @ 12:30:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class  ClassA
{
    public void TalkTo()
     {
          Assembly asm = ....  // laad hier de B.dll assembly;
       
          IMyInterface m = (IMyInterface)asm.CreateInstance ( ..... );

          if( m == null ) 
             throw new ApplicationException ("could not create");

          m.SaySomething;
 
     }
}
Je hoeft CreateInstance niet te gebruiken als class B een public ctor heeft.

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:45
En hoe ga jij dan een instance van class B gaan creeëren als je geen reference hebt naar B.dll ?
(Want dit is toch het geval bij de TS, of niet ? )

[ Voor 22% gewijzigd door whoami op 03-03-2005 15:07 ]

https://fgheysels.github.io/


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Interface: type definitie
Class: implementatie definitie van een (of meerdere) type(s)

Door de interface te definieren, definieer je het type, door die interface te implementeren in classB, maak je ClassB van het type van die interface (en ClassB zelf, en andere eventuele interfaces).

Zodoende kun je doen:
Dim a As ClassB = New ClassB()
maar ook:
Dim a As IFoo = New ClassB()

a is bij het eerste van type ClassB en bij het tweede geval van type IFoo. Als ClassB meerdere interfaces implementeert, dan kun je die in het 2e geval niet gebruiken, want a is van het type IFoo. Zodoende kun je dus multiple type inheritance implementeren in een single implementation inheritance omgeving zoals .NET

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Verwijderd

Topicstarter
Thanks voor al jullie reacties! Ik kan nu weer verder met modeleren _/-\o_
Pagina: 1