Jeg har læst lidt op på DLR'en som et led i min forberedelse til min "mini-praktik" hos IronPython Team'et og så "faldt" jeg over ExpandoObject som er en type som er kommet med .NET 4 og DLR'en.
Så hvad er dette ExpandoObject egentlig? det er en "property bag" eller på dansk en dynamisk container klasse, som giver nogle ret imponerende muligheder i samarbejde med C# og dynamic, se selv:
ExpandoObject gør det muligt at tilføje (faktisk er det også muligt at fjerne) elementer på klassen. C# minder lige pludselig rigtig meget om fx Python, imponerende!
Nu synes jeg "dynamic" keyword'et er blevet lidt mere interessant ;)
ExpandoObject kan findes under System.Dynamic namespace'et
Det undrer mig at man først typechecker vildt meget og bagefter laver mekanismer, som kan slå det fra igen. C uden plus-plus er i visse henseender faktisk bedre til at skrive kode, der fungerer som man tror den gør; Jeg tror at der for nemt kommer uoverskuelige klasser i C#.
Hvis endemålet egentlig blot er at kunne skrive overskuelig kode, fx. "msmail::add_mailaddress(client);" eller lignende, så kunne man jo ligesågodt bruge et rigtigt programmeringssprog.
Mogens Heller Grabe skrev: Fedt nok at du skal i praktisk ved IronPython-teamet, tillykke med det! Det er sgu godt gået!
Men hvorfor skriver du ikke noget om _hvorfor_ du synes at det er interessant?
Indlægget var bare tænkt og skrevet som en "teaser" for en ny mulighed. Grunden til at jeg synes "ExpandoObject" er interessant er at vi lige har fået en dynamisk klasse vi kan bruge uden for metode scope, altså som input/output parameter. Hvis jeg bruger denne teknik sammen med Linq kan jeg slippe for "eksplicit" at lave container klasser som blot skal holde et sub-resultat.
Jeg håber det forklare det lidt bedre ellers må jeg jo komme med et kodeeksempel, de gør sig bare ikke så pænt i en kommentar :)
Kenneth Geisshirt skrev: Javascript er fra "fødslen" dynamisk og derfor kan du nøjes med:
person = {}; person.Name = 'Martin Esmann'; person.Email = 'mesmann@microsoft.com'; person.Print = function () { print('Name:' + this.Name); };
person.Print();
(print findes i Rhinos runtime environment)
Det samme kunne jeg sige om Python, men her er muligheden for, i et statisk typet sprog, at springe ind i en dynamisk ikke compile time type check verden :) Det svare måske mere til at man kunne slå statisk type check til i JavaScript...
Donald Axel skrev: Det undrer mig at man først typechecker vildt meget og bagefter laver mekanismer, som kan slå det fra igen. C uden plus-plus er i visse henseender faktisk bedre til at skrive kode, der fungerer som man tror den gør; Jeg tror at der for nemt kommer uoverskuelige klasser i C#.
Hvis endemålet egentlig blot er at kunne skrive overskuelig kode, fx. "msmail::add_mailaddress(client);" eller lignende, så kunne man jo ligesågodt bruge et rigtigt programmeringssprog.
ExpandoObject er kommet som en del af DLR'en (Dynamic Language Runtime) og er tænkt som en hjælpe klasse for dem som gerne vil implementere et dynamisk sprog, fx Python, oven på CLR'en. Begrundelsen for at havde et ExpandoObject og "dynamic" keywordet er bedre grundet end mit lille "hacker" eksempel. og nu bliver jeg jo helt fristet til at spørge: "hvad er et rigtig programmeringssprog"?
og nu bliver jeg jo helt fristet til at spørge: "hvad er et rigtig programmeringssprog"?
Jaja - det tænkte jeg jo nok at du ville snuble over og det er også OK, men der er nu noget særligt behageligt ved sprog, som ikke har automatisk unrequested garbage collection
PDC2008 mener jeg Anders Hejlsberg omtalte "dynamic" erklærede objekter som værende "statically typed dynamic" (herlig forklaring!).
Som Martin skriver så er det altså et hjælpemiddel og ikke et paradimeskifte for C#. Det kan godt være at det reelt set er muligt, at skifte alle sine typer ud med "dynamic", men det er ikke meningen
"men der er nu noget særligt behageligt ved sprog, som ikke har automatisk unrequested garbage collection"
så som memory leaks, lavere produktivitet (jvf. Sun reasearch) og andre lækkerier. Kan ikke forstå hvorfor der ikke er designet flere sprog med de værdier in mind :)
Dine Esposito der skriver for MSDN har i 2007 skrevet en artikel om open/closure i javascript - fordi han ikke længere kunne nøjes med .Net genereret javascript. MS vidste godt at de ikke kunne undgå javascript - men de havde nok ikke regnet med at JQeury/extJS/GMap etc alle er ægte dynamiske størrelser. Mit bud er at javascript vil vinde meget mere udbredelse ifbm HTML 5.0
Fra studerende til professionel udvikler. En blog for studerende som ønsker at tage aktivt stilling til mulighederne i nye teknologier. Skrives af Martin Esmann, Academic Developer Evangelist i Microsoft.
Kan gratis sikkerhedssoftware virkelig beskytte din pc? Svaret er ja, hvis du vælger det rette produkt. Læs her en test af de mest pålidelige gratis sikkerhedsprogrammer.
Næsten 200 IBM-ansatte får med få timers varsel sidste arbejdsdag i dag. Ingen var orienteret forud for dagens massefyring, som effektueres øjeblikkeligt.
Flyselskabet SAS har brugt op mod trekvart milliarder kroner og seks år på at udskifte sit bookingsystem. Undervejs har der været flere projekt-udfordringer, som kulminerede en vinternat med en big bang-migrering.