13. marts 2007 - 13:23Der er
26 kommentarer og 1 løsning
Oprettelse af dynamiske klasser
Jeg har et meget interessant spørgsmål. Jeg vil gerne prøve at bygge dynamiske klasser op. Disse klasse skal bygges op efter data jeg henter fra en DB.
Jeg har nemlig en produkt database og hver produkt indeholder nogle services.
Ideeen er at jeg gerne vil lave en klasse pr. produktnavn, og metoder pr. service. Input parametre skal der ikke bekymres om i første omgang.
Hvordan er det smartest at lave sådan een. Jeg har ledt på nettet, men eksemplerne er en smule lange og for langhåret.
Nogen der kan hjælpe? eller måske frarråde det?....
Det vil ellers gør ting dynamisk, hvis det kunne lade sig gøre.
Type tObj = assembly.GetType("TestNamespace." + strClassName);
//Exempel 1: Intialiser en ny instans af Test klassen (caster den til test klassen) Test objTest = (Test)tObj.GetConstructor(new Type[] { }).Invoke(new object[] { });
//Exempel 2: Intialiser en ny instans af Test klassen uden at caste den Object objTest2 = tObj.GetConstructor(new Type[] { }).Invoke(new object[] { });
//Kalder den overridede ToString på Test obejkterne Console.WriteLine(objTest.ToString()); Console.WriteLine(objTest2.ToString());
} } }
Dette virker ihvertfald fint i .NET 2.0 og er ikke deprecated (obsolete). :)
Så var det jo bare så simpelt. Du skal bare cast'e dem til den klasse som du ved objektet er. Hvis vi tager udgangspunkt i hmortensens eksempel så bare gør følgende:
X objX = (X)Activator.CreateInstance(dynamicType); int intNumber = objX.Number(4);
Udover det så ville det jo være rarest ikke at caste til x klassen. Min formodning vil være at dem der bruger / instansierer klassen, ikke ved hvilen type klasse det er.
nej - der er ikke nogen ide hvis kalderen skal kende - hvis han ikke kender den er der en ide i det
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.