Aaron Erickson Lead Consultant ThoughtWorks Author The Nomadic Developer CoAuthor Professional F coming soon Microsoft MVP C Crazy Shit We Can Do With the Dynamic Keyword Not all of this is a good idea remember use and ID: 515627
Download Presentation The PPT/PDF document "Dynamic C# - A New World of Possibilitie..." is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.
Slide1
Dynamic C# - A New World of Possibilities
Aaron EricksonLead Consultant, ThoughtWorksAuthor, The Nomadic DeveloperCo-Author, Professional F# (coming soon!)Microsoft MVP – C#Slide2
Crazy Shit We Can Do With the Dynamic Keyword*
*Not all of this is a good idea (remember, use and abuse)The initial name of the talk before it was rejected…Slide3
C# - What it resembles now…Slide4Slide5Slide6
C# - A little of everything…Curly Braces (1.0)
Functional “Lite” with Linq (3.0)
And Now, Dynamic (4.0)
Generics (2.0)Slide7
Duck TypingSlide8Slide9
Expando ObjectsSlide10Slide11
Treat Method Calls Like MessagesSlide12
Send Message
Receive MessageSlide13
And More…
Metaprogramming - take the expression tree called by the caller and do something with it.
Interop
– call other people’s libraries written using real dynamic languages (Ruby, JS, Python).Slide14
Interesting Applications of Dynamic C#Slide15
ActiveRecordSlide16
“ActiveRecord” for XMLSlide17
InteropSlide18
Abuses… oh yes…
You shuddering yet? If not, you should be!Slide19
Is dynamic programming the answer to anything and everything?Slide20
Case For
Case AgainstPerformance – dynamic lookup just can’t be as fast as static lookup.You were confused with var? dynamic will make your head spin.
What is so bad about using strings in a lookup (i.e.
table[“field
”]
vs
table.field
)
If you want dynamic, just use a language designed for it, like Ruby! Or JavaScript!
A lot fewer things are CPU bound than we tend to think. DB lookups? Really?
Sorry – if you are confused with
var
, you really need to put down the keyboard and take up something for dummies, like investment banking.
table.field
looks cleaner, survives a rename refactoring, and can just take the shape of a static object later if introduced (introduce class refactoring for R# someday?)
Sometimes language choice is political. But need for dynamic remains.Slide21
Demo – Stupid Dynamic C# TricksSlide22
Dynamic Everywhere? My Thoughts
Performance argument has merit. Sometimes. No pretending Twitter didn’t happen.
Dynamic readers for things like Json
, XML, Text, Excel, etc – will be really wicked cool!
End-user definition of objects. I can finally envision systems, based on C#, where you can have user defined fields on CRUD objects from databases, where an end user adds a field, names it, and binding just “works”.
This does not belong in your math or stats library. That is what
Clojure
,
Scala
,
Erlang
, F# - or where C# is your given language, LINQ, are for.
Linq
+ Dynamic in C# is mostly unexplored territory. Some amazing things could come out of that intersection.Slide23
So you wanna do dynamic…
You will do TDD. Without it, you are a mess of runtime errors and maintenance nightmares
You will respect that with great power comes great responsibility. Programs using dynamic programs tend to be smaller, but
metaprogramming to extremes can end up becoming “write-only” code.
You will need to consider that vast parts of .NET-land have never seen this stuff before. You will be ready to explain and justify why and how this stuff improves things.
In 2020, you will curse, and maybe throw a chair or two, because of some abuse of dynamic some schmuck did in 2010 in that 10 year old code base.
There is a good chance that schmuck will be me
Slide24
Questions?Slide25
Thank You!
aaron.c.erickson@gmail.comtwitter.com/aaronericksonhttp://nomadic-developer.com/