Toon posts:

[C#]Inherited Singleton behaviour

Pagina: 1
Acties:

  • roy-t
  • Registratie: oktober 2004
  • Laatst online: 15-09 11:32
Voor een stuk code heb ik een basis factory gemaakt. Factories zijn eigenlijk altijd Singletons (of static) en dat gedrag wil ik ook afdwingen.

Dus nu zat ik te denken aan een manier om singleton gedrag te laten inheriten. Helaas heb je dan toch een statische methode nodig en dat kun je niet afdwingen via inheritance.

Mijn volgende idee was om de basis fabriek een statische methode GetInstance<T>(); te geven. Maar aan de T heb je natuurlijk niets omdat de constructor private/protected moet zijn. Je kunt geen new T maken vanuit de statische methode in de hoofdclasse (tenminste, ik neem aan dat het parentobject niet bij protected variables van child objecten kan, ondanks 'dat het familie is').

Ik vond ook nog deze link, maar daar kwamen ze er ook niet uit. http://www.c2.com/cgi/wiki?InheritedJavaSingletonProblem

Nu is het voor mij niet superbelangrijk om dit gedrag in één keer vast te leggen, maar het leek me toch wel een interessant concept. Heeft iemand een idee om singleton gedrag te laten overerven.

[disclaimer]Dit concept is in mijn hoofd al ver voorbij nuttig, meer een leuke onzinnige gekke gedachten gang, ik zal de code ook echt niet opnemen in mijn codebase, maar het leek me wel een leuk raadsel voor hier :)[/]

~ Mijn prog blog! ~ @RoyTries


  • FireDrunk
  • Registratie: november 2002
  • Laatst online: 21:45

FireDrunk

BBG'er
Ik heb dit zelf ook wel eens geprobeerd te maken, maar je kan wel alle methodes afdwingen door inheritence of iets dergelijks, maar je kan nooit de members van de klasse afdwingen (de letterlijke instantie) hierdoor zou je altijd 'foutieve' implementaties kunnen maken. Je breekt dus de zekerheid dat een inherited klasse echt een singleton is.

Het is trouwens niet helemaal onmogelijk, ik had geloof ik iets verzonnen met Reflection.

Dus iets van T newSingleton = SingletonFactory.CreateSingleton<T>();.
Maar hoe... te lang geleden :)

Even niets...


  • Snake
  • Registratie: juli 2005
  • Laatst online: 03:01

Snake

Los Angeles, CA, USA

Ik wou dit ook ooit doen: \[C#] Public constructor vermijden. maar dat werkte niet.

Als je public constructers wilt vermijden ga je toch met reflection aan de gang moeten denk ik.

Going for adventure, lots of sun and a convertible! | GMT-8


  • Korben
  • Registratie: januari 2001
  • Laatst online: 20-09 11:49

Korben

() => {};

Ik denk dat met reflectie werken de enige werkbare manier is, anders kun je een private/protected constructor niet aanroepen. De vraag is dan nog natuurlijk waar je de reference naar je singleton bewaart; in de basisklasse of in de afgeleide klasse.

Wil je het echt netjes doen en afdwingen dat een afgeleide van je basisfactory niet stiekem toch een public constructor heeft, dan zul je met attributen en iets als PostSharp moeten gaan werken.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • yade
  • Registratie: mei 2002
  • Laatst online: 16-09 21:02
Wellicht als je er een class library van maakt dan kun je de constructors van de classes internal maken. De factory, die ook onderdeel is van de library is dan de enige methode om instanties te maken van de classes.

  • FireDrunk
  • Registratie: november 2002
  • Laatst online: 21:45

FireDrunk

BBG'er
Maar dan kan je het niet zelf zomaar extenden, en krijg je gewoon een simpele niet uitbreidbare factory.
Mijns inziens is het dan niet echt gelukt :P

Even niets...


  • YopY
  • Registratie: september 2003
  • Laatst online: 20-09 17:14
Je kunt ook van het 'single factory'-idee afstappen, zeker als je die dmv je singleton globaal bereikbaar wilt maken. Dmv dependency injection kun je een Factory voor een specifiek objecttype toekennen aan de objecten die de objecten die je Factory teruggeeft nodig heeft. Zo kun je op een later tijdstip je factory ook vervangen met een andere die ander gedrag toont indien dat nodig blijkt te zijn.

Zomaar een rant / gedachtenspinsel.

Wat je ook kunt doen: een FactoryFactory aanmaken (of hoe je het wilt noemen), een object dat dient als een 'wrapper' om je singletons. Alleen via je FactoryFactory kun je instanties van je Factories krijgen.
Pagina: 1


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee