Svish Skrevet 27. oktober 2008 Del Skrevet 27. oktober 2008 Er det mulig å lage et array av typer, som er begrenset til typer som implementerer et interface eller arver fra en spesiell klasse? Altså ikke objekter av disse typene, men typene selv. Slik at jeg for eksempel kan ta InterfaceClass c = new typeof(list[0]); eller noe sånt. om det ga mening i det hele tatt Lenke til kommentar
GeirGrusom Skrevet 27. oktober 2008 Del Skrevet 27. oktober 2008 Ja, det kan du... men husker ikke helt syntaksen... public class InterfaceClassList<T : IInterfaceClass> : List<T> { } Noe slikt kanskje? Du finner sikkert ut av det hvis du bare leser om generics på MSDN Lenke til kommentar
The Jackal Skrevet 28. oktober 2008 Del Skrevet 28. oktober 2008 (endret) Litt usikker på hva du mener, men er det noe av dette? public interface IMyInterface { } public class A : IMyInterface { } public class B : IMyInterface { } List<IMyInterface> array = new List<IMyInterface>(); array.Add(new A()); array.Add(new B()); Endret 28. oktober 2008 av The Jackal Lenke til kommentar
Svish Skrevet 29. oktober 2008 Forfatter Del Skrevet 29. oktober 2008 nesten. noe som dette: public interface IMyInterface { } public class A : IMyInterface { } public class B : IMyInterface { } List<IMyInterface> array = new List<IMyInterface>(); array.Add(typeof(A)); array.Add(typeof(B)); Lenke til kommentar
The Jackal Skrevet 29. oktober 2008 Del Skrevet 29. oktober 2008 Vel...simpleste case vil være å bruke: List<Type> array = new List<Type>(); A a = new A(); B b = new B(); array.Add(a.GetType()); array.Add(b.GetType()); Litt usikker på om du faktisk kan si om typen som lagres der f.eks skal implementere et interface siden du strengt tatt ikke lagrer den klassen der, men et object av typen Type. Du må eventuelt implementere din egen Type på en eller annen måte, men etter hva jeg kjapt så på MSDN, så var ikke det akkurat rett fram. Lenke til kommentar
Svish Skrevet 29. oktober 2008 Forfatter Del Skrevet 29. oktober 2008 nei nemlig. målet var om det var mulig å ha en liste med klasser som en bruker kunne opprette liksom. men men. finner sikkert en annen løsning Lenke til kommentar
The Jackal Skrevet 29. oktober 2008 Del Skrevet 29. oktober 2008 Du trenger ikke å lagre typen til klassen for å få til det da Lenke til kommentar
GeirGrusom Skrevet 29. oktober 2008 Del Skrevet 29. oktober 2008 Du må enten bruke et felles interface eller superklasse som alle arver. Å gjøre det på noen annen måte er fullstendig ulogisk. Lenke til kommentar
The Jackal Skrevet 29. oktober 2008 Del Skrevet 29. oktober 2008 Du må enten bruke et felles interface eller superklasse som alle arver.Å gjøre det på noen annen måte er fullstendig ulogisk. Det vil jo uansett ikke løse problemstillingen hans. Hvis jeg nå forstår det korrekt vel og merke, vil han bare ha en liste med forskjellige typer som man kan instansiere. Hvis han skal gjøre det må han vel muligens lage sin egen klasse som arver fra Type, og override GetType eller no slikt på klassene han bruker. Vet strengt tatt ikke om det går. Lenke til kommentar
GeirGrusom Skrevet 29. oktober 2008 Del Skrevet 29. oktober 2008 Eller overloade Add på List<T> og legge til en sjekk der? Vel, for denne jobben har jeg som regel bare brukt en List<Type> og kontrollert når jeg har lagt til typene at de for eksempel arver fra et visst interface, som kan sjekkes ganske enkelt med Type klassen. Enten kan du bruker interface, eller en attributt, helst begge deler. Deretter brukes bare den velkjente Activator for å lage en ny instans. Typisk sted en bruker dette på er når en laster en Dll dynamisk for å utvide programmet. Jeg bruker dette i flere programmer for å kunne legge til nye funksjoner, og det jeg gjør da, er at alle funksjoner som skal brukes av mor-programmet må få en spesiell attributt som også gir annen data som for eksempel grafikk som assosieres med klassen og eventuell beskrivelse. Deretter sjekkes det at klassene bruker et spesifikt interface fra en felles dll fil. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå