Toon posts:

[C#] Multiple inheritance

Pagina: 1
Acties:

  • Maarten Kroon
  • Registratie: maart 2006
  • Laatst online: 19-09 00:40
Beste Tweakers,

Ik ben bezig met een Microsoft HoloLens app met Unity3D en C#. Ik loop echter tegen het probleem aan dat ik een klasse heb die van twee andere klassen wil erven (dit kan niet met C#). Ik heb dit geprobeerd op te lossen met interfaces maar dit wil niet echt lukken. Ik heb een vereenvoudigde versie van het probleem in onderstaande beschrijving en klassendiagram geschetst

Ik heb een aantal soorten objecten:

- NetworkObjectManager, singleton klasse met met een lijst van networkobjecten en subklassen daarvan.

- MoveableObject, object welke de gebruiker zelf een plaats kan geven.
- NetworkObject, die niet door de gebruiker verplaatst kan worden maar wel zijn positie via het netwerk naar andere HoloLens brillen stuurt.
- AdvancedNetworkObjecten, zelfde als networkobject maar uitgebreider.

- MoveableNetworkObject, kan de gebruiker zelf verplaatsen en deelt zijn locatie via het netwerk. Hier zit het probleem: deze klasse wil ervan van netwerkobject want de NetworkObjectManager kent alleen netwerkobjecten. Daarnaast wil de klasse ook ervan van MoveableObject want deze klasse bevat een groot deel van de functionaliteit van MoveableNetworkObject.



Wat kan een nette oplossing voor dit probleem dat zou eenvoudig lijkt? Hopelijk kan iemand me hierbij helpen.

EDIT: juiste afbeelding toegevoegd.

  • Not Pingu
  • Registratie: november 2001
  • Laatst online: 18-10 11:54

Not Pingu

Dumbass ex machina

Moet NetworkObject perse een concrete class zijn of kun je er ook een interface van maken?

Certified smart block developer op de agile darkchain stack. PM voor info.


  • Maarten Kroon
  • Registratie: maart 2006
  • Laatst online: 19-09 00:40
Not Pingu schreef op maandag 30 oktober 2017 @ 16:33:
Moet NetworkObject perse een concrete class zijn of kun je er ook een interface van maken?
NetworkObject wil ik het liefste als concrete klasse houden, anders moet ik zijn functies in iedere subklasse opnieuw definiëren of is hier een oplossing voor?

  • Gerco
  • Registratie: mei 2000
  • Laatst online: 03-12 00:23

Gerco

Professional Newbie

Ik denk dat dit een case is voor Favor composition over inheritance. Elk object wat je kan zien is een "MovableObject" en elk MovableObject heeft een controller welke ervoor zorgt dat het kan bewegen. Objecten die door de speler gecontroleerd kunnen worden hebben dan een "PlayerController" en objecten die door andere spelers aangestuurd worden krijgen een "NetworkController".

Op die manier koppel je de aansturing los van wat voor soort object het is en heb je dit probleem niet meer.

[Voor 6% gewijzigd door Gerco op 30-10-2017 19:02]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10! | Huis te koop in Barendrecht!


  • Maarten Kroon
  • Registratie: maart 2006
  • Laatst online: 19-09 00:40
Gerco schreef op maandag 30 oktober 2017 @ 17:24:
Ik denk dat dit een case is voor "Favor composition over inheritance". Elk object wat je kan zien is een "MovableObject" en elk MovableObject heeft een controller welke ervoor zorgt dat het kan bewegen. Objecten die door de speler gecontroleerd kunnen worden hebben dan een "PlayerController" en objecten die door andere spelers aangestuurd worden krijgen een "NetworkController".

Op die manier koppel je de aansturing los van wat voor soort object het is en heb je dit probleem niet meer.
Dit is denk ik een goed idee, ik ga ermee aan de slag! Bedankt.

  • armageddon_2k1
  • Registratie: september 2001
  • Laatst online: 20:28
Als je met Unity bezig bent heb je misschien ook al gemerkt dat de hele architectuur van Unity ook heel erg gebaseerd is op Composition. Alle GameObject bestaan uit collecties van Components, zoals een MeshRenderer, AudioComponent, Collider, etc.

Niet alleen maakt het het geheel flexibeler, het is ook exact volgens de Unity manier van denken.

Engineering is like Tetris. Succes disappears and errors accumulate.


  • whoami
  • Registratie: december 2000
  • Laatst online: 20:56
Gerco schreef op maandag 30 oktober 2017 @ 17:24:
Ik denk dat dit een case is voor Favor composition over inheritance. Elk object wat je kan zien is een "MovableObject" en elk MovableObject heeft een controller welke ervoor zorgt dat het kan bewegen. Objecten die door de speler gecontroleerd kunnen worden hebben dan een "PlayerController" en objecten die door andere spelers aangestuurd worden krijgen een "NetworkController".

Op die manier koppel je de aansturing los van wat voor soort object het is en heb je dit probleem niet meer.
Vind ik een heel goed voorstel. Hiermee ga je dan meteen ook nog eens je class-structuur heel wat vereenvoudigen.

Wat voor mij nog een doorn in het oog zou zijn, is die NetworkObjectManager. Wat is die zijn functie precies ?

Het lijkt me ook dat ieder MoveableObject zijn positie moet kunnen delen via het netwerk, ongeacht of het object nu wel of niet door de speler kan aangestuurd worden ?

  • Maarten Kroon
  • Registratie: maart 2006
  • Laatst online: 19-09 00:40
whoami schreef op maandag 30 oktober 2017 @ 20:20:
[...]

Wat voor mij nog een doorn in het oog zou zijn, is die NetworkObjectManager. Wat is die zijn functie precies ?

Het lijkt me ook dat ieder MoveableObject zijn positie moet kunnen delen via het netwerk, ongeacht of het object nu wel of niet door de speler kan aangestuurd worden ?
De HoloLens brillen versturen hun berichten via een byte stream over het netwerk. De NetworkObjectManager ontvangt de berichten en stuurt deze door naar het juiste object.

Niet ieder MoveableObject moet zijn positie kunnen delen via het netwerk, de app bevat ook objecten die verplaatst kunnen worden maar die hun positie niet via het netwerk mogen delen.

  • Maarten Kroon
  • Registratie: maart 2006
  • Laatst online: 19-09 00:40
Probleem is nu opgelost door ieder object dat verplaatst moet worden een MoveableObject aan te laten maken en niet meer te erven van de klasse.
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