Toon posts:

[C#] van Type een nieuwe object maken*

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik ben nu dus bezig met een applicatie, en die bestaat uit verschillende assembly's. Nu heb ik een array van een klasse gemaakt en die wil ik toegankelijk maken in de andere assembly.
Het probleem is dus, dat ik die array d.m.v. reflection wel kan overgeven, maar dan kan ik hem niet "eruit halen". Je kan dus een klasse maken d.m.v.:
C#:
1
object obj = (object)Activator.CreateInstance(type);

Maar het probleem is dus, dat je het object wel moet hebben. Je declareert dus een nieuw object, maar je hebt het object niet. Dus ik heb alleen een Type en is dus mijn vraag of je daar een klasse van kan maken dus dat je
C#:
1
klassenaam obj = (klassenaam)Activator.CreateInstance(type);

kan doen....

Het is een beetje lastig, maar alvast bedankt.

[ Voor 8% gewijzigd door Verwijderd op 17-11-2003 13:13 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:10
Je bent nogal vaag.
Je wilt dus een nieuw object (geen klasse) instantieren adhv een typenaam die je hebt? Dat kan je doen met behulp van de Activator class, zoals je toont in je post.

Wat wil je nu nog hebben? Ik veronderstel de klassenaam zodat je kan casten?

https://fgheysels.github.io/


  • dotcode
  • Registratie: Augustus 2003
  • Laatst online: 14-08 11:19

dotcode

///\00/\\

Misshien idee om met interfaces te gaan werken? Je kan een interface maken waaraan je kan vragen welke klasse het is voor dat je gaat casten. Maar dat moet ook weer een interface zijn, anders kan je nooit een functie op het object aanroepen.

Verwijderd

Topicstarter
Ja, klopt. het is een beetje vaag.

Nog een keer proberen ;)
ik heb dus in een assembly een klasse Module. Hier staan dus allemaal waarden in enzo. In een andere klasse heb ik dus een ArrayList en daarin staan wat items van de klasse Module. Nu wil dus in een andere assembly die ArrayList uitlezen. Maar, dat gaat dus niet omdat je die moet typecasten naar de Module klasse, die je niet weet omdat die in de andere assembly staat.
Dus, dan geef ik die Module klasse mee als Type. Kan je dan van die Type een klasse declareren, zodat je die ongeveer zo kan lezen???:
C#:
1
Module newmodule = (Module)ArrayList[itemnr];

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op 17 november 2003 @ 13:28:
ik heb dus in een assembly een klasse Module. Hier staan dus allemaal waarden in enzo. In een andere klasse heb ik dus een ArrayList en daarin staan wat items van de klasse Module. Nu wil dus in een andere assembly die ArrayList uitlezen. Maar, dat gaat dus niet omdat je die moet typecasten naar de Module klasse, die je niet weet omdat die in de andere assembly staat.
1) Het is 'class', niet 'klasse'.
2) 'item' is hier 'instance' ?
3) Je 'class' heeft geen waarden. Een instance heeft waarden, een class zelf heeft niets, het is nl. een definitie, geen instance.
4) Een class heeft geen uitleesbare arraylist. Een instance van die class (ook wel object genoemd) heeft een uitleesbare arraylist in jouw geval.

Je raakt zelf volledig het spoor bijster omdat je class met instance verwart en zo dus niet een goed beeld hebt wat @ compile time beschikbaar is en wat @ runtime.
Dus, dan geef ik die Module klasse mee als Type. Kan je dan van die Type een klasse declareren, zodat je die ongeveer zo kan lezen???:
C#:
1
Module newmodule = (Module)ArrayList[itemnr];
Err... ja ? Casten heet dat. (je ArrayList variable zou ik wel anders noemen) 'Module' is een type (class definitie) en als je die assembly en die namespace referencet in je code waar je de Module objects wilt gebruiken dan kan dat gewoon.

Ik zou echter je willen aanraden Programming C# door J. Liberty te kopen en te lezen en daarna weer met C# bezig te gaan, want je hebt dermate veel moeite met basic C# dingen dat je jezelf geen plezier doet op dit niveau verder te modderen want je zult om de 5 minuten een nieuwe vraag moeten stellen.

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