[C#] Instance vanuit iedere functie kunnen aanroepen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • iChaos
  • Registratie: December 2009
  • Laatst online: 10-09 21:59

iChaos

It's Lupus.

Topicstarter
Ik werk momenteel aan een applicatie, die ik ontwikel in Visual Studio C# 2010 Express. Ik maak hierbij gebruik van MonoTorrent als externe library. Hierbij heb ik het volgende stukje code nodig:

code:
1
2
3
4
5
6
7
        public void initEngine()
        {
            // Preparing the ClientEngine
            ClientEngine engine;
            engine = new ClientEngine(new EngineSettings());
            
        }


Dit werkt prima, en binnen initEngine kan ik prima werken met 'engine'. De andere public voids kunnen echter geen gebruik maken van 'engine'. Dit heeft voor zover ik weet te maken met dat die engine niet public is. Ik kan echter niet uitvogelen hoe ik die engine dus echt publiekelijk beschikbaar kan maken zodat andere voids er ook bij kunnen.

Ik heb wel geprobeerd te googlen, maar ik denk dat ik met de verkeerde termen smijt om iets te kunnen vinden. Overigens zit deze functie in de volgende class:

public partial class frmMain : Form
{

Edit: nvm, al uitgevonden.

Acties:
  • 0 Henk 'm!

  • ZaPPZion
  • Registratie: Februari 2009
  • Laatst online: 28-08 12:46
Kijk eens naar singleton design, dat is hier voor bedoelt :)

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
ZaPPZion schreef op zondag 12 augustus 2012 @ 19:08:
Kijk eens naar singleton design, dat is hier voor bedoelt :)
Neen. Je moet kijken naar scope.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Szz
  • Registratie: April 2011
  • Niet online

Szz

ZaPPZion schreef op zondag 12 augustus 2012 @ 19:08:
Kijk eens naar singleton design, dat is hier voor bedoelt :)
Singleton design is echter iets dat je best vermijdt :)

Het probleem hier is echter dat de scope van engine te beperkt is, en dus enkel geldig voor initEngine. Door engine naar boven te trekken (en dus op je class zet ipv enkel in je methode) werkt alles zoals je het verwacht.

...Maar dat had OP ondertussen al uitgevogeld :)

Acties:
  • 0 Henk 'm!

  • iChaos
  • Registratie: December 2009
  • Laatst online: 10-09 21:59

iChaos

It's Lupus.

Topicstarter
Bedankt voor de hulp jongens! :) Naar aanleiding van het artikel op de frontpage dat uTorrent nog meer bloated werd, besloot ik wat te proberen met MonoTorrent om een hele kleine torrentclient te schrijven. Intussen is het bijna in staat om torrents te downloaden, morgen dat deel dus even helemaal laten werken en dan eens kijken hoe ik het iets gebruiksvriendelijker maak, percentages kan laten doen, etc. :)

Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Szz schreef op zondag 12 augustus 2012 @ 19:36:
Het probleem hier is echter dat de scope van engine te beperkt is, en dus enkel geldig voor initEngine. Door engine naar boven te trekken (en dus op je class zet ipv enkel in je methode) werkt alles zoals je het verwacht.
Het werkt, maar is nog niet zoals je het zou mogen verwachten. Daarvoor zul je het nog een niveau hoger moeten tillen: via dependency injection die ene engine instantie beschikbaar maken aan deze Form klasse en aan andere componenten. Wat heeft een applicatie venster nou direct te maken met de onderliggende torrent engine? Dat venster hoort daar helemaal geen zeggenschap over te hebben!

Overigens zou de TS er goed aan doen om zich in elk geval voor non-private, non-internal members aan de code style voor .NET te houden: methods en classes beginnen met hoofdletters.
Pagina: 1