Jeg kan ikke forstå hvorfor du vil det gøre det dynamisk. Såvidt jeg ved er det heller ikke muligt. Dot virker ikke inde i krokodillenæb. Jeg ville gøre det på burningice's måde. Efter mit hoved giver den løsning mere mening.
Det kan jeg ikke, da der inde i DoIt metoden kører noget reflection og noget hiven ud af PropertyInfo oplysninger på T. De oplysninger SKAL i eksemplet være fra MyClass - det er ikke nok, at det bare er fra AObject. Til info, er det fordi at jeg hiver alle property navne ud, og bruger dem til en SQL sætning, så jeg får et T object fyldt op med de data, der har samme navne i databasen. MyClass har f.eks. 2 propertys: ID og Age. Med reflection får jeg så fat i "MyClass", som er tabel navn og "ID" og "Age" som er kolonne navne - men disse eksisterer ikke i AObject.
@malkor Grunden til at jeg vil gøre det dynamisk er, at når jeg er færdig, kan jeg kalde min metode DoIt, med hvilket som helst object. Når jeg er HELT færdig, skal jeg, når jeg må implementere en ny entitets klasse, kun lave en klasse der nedarver fra AObject med attributter og tilhørende properties. Tilføje det som tabel + kolonner i databasen - og det er det! Alt anden kode er så dynamisk, at der f.eks. ikke står MyClass ét eneste sted udover i dens egen klasse - og så muligvis i en GUI - og det er der jeg vil have muligheden for at bruge type og ikke et klasse nacn ;)
Håber jeg har gjort mig forståelig. Hvis ikke så spørg endelig :)
Det er nemt nok, via Reflection, at finde ud af hvilke SubTypes der findes. Dvs. at hvis du har B der arver fra A så kan du ved hjælp af reflection få fat i A ud fra B, men desværre ikke omvendt.
Du bliver nødt til at kalde din metode explicit med den type du i metoden vil benytte dig af. Vil du finde alle attributer på klassen B, så bliver du nødt til at give B som argument, selvom metoden f.eks. kun forventer A.
Hvis du ved ved runtime ved hvilken type metoden bliver kald med, hvorfor så ikke caste det til den rigtige type før metoden kaldes?
ie.
AObject a = System.Activator.CreateInstance("noget", "din klasse"); DoIt<a>();
Har aldrig forsøgt at få et (assembly+)klassenavn ud på en dynamisk facon. Regnede heller ikke rigtig med at det kunne lade sig gøre, men tænk nu hvis..... ;)
Hvordan får jeg nu delt point ud her?
Læg svar allesammen, så prøver jeg at fordele pointene rimeligt ud - haha
Giver ice det meste - og da alle ikke har svaret, bliver det 10-50 til malkor og ice.
AObject a = System.Activator.CreateInstance("noget", "din klasse"); DoIt<typeof(a)>();
Kan desværre heller ikke lade sig gøre - har opgivet det nu. Er efterhånden overbevist om, at det ikke kan lade sig gøre - måske i .net 3.0? Vi får at se... :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.