HDSoftware Skrevet 23. juni 2008 Skrevet 23. juni 2008 (endret) Prøver å effektivisere klassene mine litte grann her, fordi jeg har et sett med klasser som alle sammen har nøyaktig samme virkemåte, men med forskjellig datatype. Jeg tenker at generiske klasser og metoder må være en slags løsning her, men klarer ikke helt å få dette til Sett att man har disse klassene: public class kunder { // Div properties public KundeClass GetKunde(string pKundeID) { // Kode som henter rett kunde o returnere et objekt } } public class varer { // Div Properties public VareClass GetVare(string pVareID) { // Kode som henter rett vare } } som dere ser så er dette nesten identisk. Forskjellen ligger i at metodene håndterer forskjelige datatyper. Jeg ønsker å lage en klasse som ser noe slik ut: public class datafil { // Eventuelle properties public EttEllerAnnet GetRecord(string pRecordID) { // En eller annen form for generisk kode } } og dermed kunen gjøre slik: datafil Kunder = new datafil(MuligensNoeHer) evt. class Kunder : datafil { } Jeg har svert liten erfaring med generiske klasser, annet en at jeg ser hvordan det virker. Jobber mye med List<t> og SortedList<k,v> etc. så jeg kjenner prinsippene i den enkleste formen. Takker for all hjelp med dette.. Ole Endret 23. juni 2008 av HDSoftware
HDSoftware Skrevet 25. juni 2008 Forfatter Skrevet 25. juni 2008 50 stykker har lest denne tråden og ingen vet hvordan? Betyr dette at det ikke lar seg gjøre? Kansje litt ambisiøs her ;-) I Clarion ville jeg løst dette ved å lage en template (Clarions måte å lage generisk kode). Kansje jeg kan lage en template i Visual Studio som fikser dette? Anyone....?!? Ole
The Jackal Skrevet 25. juni 2008 Skrevet 25. juni 2008 (endret) public class DataFile<T> where T : IData, new() { public T Get(string id) { T s = new T(); FileStream fs = File.OpenRead(s.Filename); s.Populate(id); return s; } } public class Kunde : IData { public string Filename { get { return "filename"; } } public void Populate(string id) { } } public class Vare : IData { public string Filename { get { return "filename"; } } public void Populate(string id) { } } public interface IData { string Filename{get;} void Populate(string id); } Absolutt ikke noe fullstending løsning, men gir deg muligens noe å bygge videre på. Bare for å illustrere hvordan du kan bruke properties/funksjoner på IData i den generiske Get metoden. For å bruke den: DataFile<Kunde> fKunde = new DataFile<Kunde>(); Kunde kunde = fKunde.Get("1"); DataFile<Vare> fVare = new DataFile<Vare>(); Vare vare = fVare.Get("1"); Endret 25. juni 2008 av The Jackal
HDSoftware Skrevet 25. juni 2008 Forfatter Skrevet 25. juni 2008 WOW! Her var det mye snacks. WHERE på en CLASS har jeg aldri sett før. Skal studere eksemplet ditt. Ser jo ut som det jeg er ute etter.. Takker Ole
The Jackal Skrevet 25. juni 2008 Skrevet 25. juni 2008 (endret) For å gjøre det litt lettere for deg (muligens), så betyr "where" at du kan sette restriksjoner på genericen (T i dette tilfellet). Her har jeg sagt at denne klassen må være av type IData og new() betyr at det må finnes en parameterløs konstruktør (som jeg forsåvidt ikke har definert, men siden det ikke finnes noen andre konstruktører der så er den der implisitt). Edit: mer om contraints hvis det interesserer: http://msdn.microsoft.com/en-us/library/d5x73970.aspx Endret 25. juni 2008 av The Jackal
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å