[C#] Event van een andere class aanroepen

Pagina: 1
Acties:

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Topicstarter
Ik heb een class A en een class B. Class A bevat een aantal events en instrueert class B om het eea te volbrengen. Class B moet tijdens die actie wel wat events aanroepen, welke in class A staan. Maar hoe moet dit eigenlijk :? :?

Ik heb in class A voor ieder event een protected virtual methode gemaakt waarmee ze aangeroepen kunnen worden. Ik wil ze uiteraard niet public maken.

Ik kan niet gewoon Owner.Eventje(); aanroepen. Ik heb ook een private class gemaakt, waarin die protected event-aanroep-methoden public gemaakt worden. Maar casten naar die class mag niet (?!?!) dus dat valt ook af.

Is hier aan gedacht in C#, of moet ik die event-aanroep-methoden in godsnaam dan maar public maken?

日本!🎌


Verwijderd

Zo op het eerste gezicht, zou ik zeggen dat je model niet klopt. Het klinkt alsof je methoden behorende bij de data in class B, in class A hebt zitten.

Zo op het tweede gezicht zou ik zeggen dat je even moet zoeken naar de term 'interfaces', alhoewel ik niet zeker weet of C# daar ook aan doet..

Verwijderd

Volgens mij moet je in class B zorgen dat er een delegate is die bepaalde events kan afhandelen. Die meldt je aan bij de events in class A. Als er een event plaatsvindt, worden dus automatisch de juiste methoden in B aangeroepen. Zo hoeft class A helemaal niet van class B te weten, en is er alleen een public event in class A nodig.

  • whoami
  • Registratie: December 2000
  • Laatst online: 30-04 15:31
In .NET hebben ze het bij de Windows controls toch opgelost door een public method: bv PerformClick (of was het ook alweer DoClick :? ).
Hoe wil jij anders events triggeren van buitenaf, als je geen enkele 'public' accessor wilt hebben?

Als je dat echter wil doen (events van class B triggeren vanaf class A), dan denk ik echter eerlijk gezegd dat er iets niet klopt aan je design.

Hetgeen wat Cheatah zegt, kan natuurlijk een oplossing zijn, maar eigenlijk kan daar niet echt iets over gezegd worden, aangezien we de juiste situatie niet kennen.
Echter, die oplossing met delegates zal alleszins veel beter zijn, omdat je class A dan van class B loskoppelt; nu echter moet class A iets weten van class B (of omgekeerd).

[ Voor 31% gewijzigd door whoami op 31-08-2005 23:56 ]

https://fgheysels.github.io/


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Topicstarter
Ik heb wel een public accessor (het event zelf), maar die mag ik niet aanroepen van de compiler, mag alleen vanuit dezelfde class |:(

Class B is een generieke class, dus als ik daaraan events zou toevoegen, zou class A daar nog niets vanaf weten. Dan zou ik dus hele vieze "if is class B then..." code moeten implementeren.

En dat van PerformClick klopt geloof ik wel, maar die is dus ook protected, en dat is in mijn geval niet handig.

[ Voor 23% gewijzigd door _Thanatos_ op 01-09-2005 00:10 ]

日本!🎌


Verwijderd

Als je Class B generiek wilt houden, maar er toch events uit andere classes op los wilt laten, is een visitor design pattern dan niet wat voor jou?

[rml][ alg] preview visitor artikel[/rml]

[ Voor 24% gewijzigd door Verwijderd op 01-09-2005 00:12 ]


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Topicstarter
Het heeft me wel op een idee gebracht. Een internal class die de events vasthoudt, en class B een internal property om dat object in te gieten. Class A idem dito. solved :)

日本!🎌


Verwijderd

Ik kan niet helemaal volgen wat je bedoelt, maar het klinkt een beetje smerig allemaal eigenlijk..

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Topicstarter
Maarja, wat moet ik dan... ik had ook gehoopt dat ik een event gewoon kon aanroepen, maar als MS besluit dat dat niet kan (wat heel netjes is), zal ik eromheen moeten werken.

日本!🎌


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

_Thanatos_:
Ik heb wel een public accessor (het event zelf), maar die mag ik niet aanroepen van de compiler, mag alleen vanuit dezelfde class |:(
Je bedoelt dat je 'm niet mag firen vanuit een andere class? Dat vind ik nogal logisch.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Topicstarter
De een vindt dat logisch, de ander is het jarenlang gewend vanuit Delphi. Een event is tenslotte een method pointer, dus ik zie niet waarom je die niet zou kunnen aanroepen.

Is er niet een omweg om een tóch aan te roepen?

日本!🎌


  • whoami
  • Registratie: December 2000
  • Laatst online: 30-04 15:31
Als je jouw event niet met het event keyword markeert, dan kan het.

https://fgheysels.github.io/

Pagina: 1