Rob Conery’s post Redlining C#’s Dynamic Features shows Ruby source and then explores the C# 4.0 dynamic keyword feature to achieve the same results.
So to get my head around the Ruby example, I worked up one way to do it in PowerShell using the New-Module cmdlet, wrapped it in a function and you can see the code below.
Like Ruby, PowerShell lets us assign a string to Address in the first example ($p1) and then in the second example ($p2) to a more complex object without breaking the Person implementation.
Rob Conery’s post goes on to show that C# 4.0 can do the same thing. The dynamic dial is being turned up for this static language.
Rob suggests:
C# is going more and more dynamic – time and feature set have proven that. Maybe it’s time to bend your thinking? Or maybe it’s not…
In either case it is possible to do and should make for interesting discussions.
Function New-Address { New-Module -AsCustomObject -Name Address { $Number = $null $Street = $null $City = $null $State = $null $Country = $null Export-ModuleMember -Variable * } } Function New-Person { New-Module -AsCustomObject -Name Person { $Name = $null $Address = $null Export-ModuleMember -Variable * } } $p1 = New-Person $p1.Name = "Mary" $p1.Address = "Number 17, Cherry Tree Lane" $p1 $p2 = New-Person $p2.Name = "Burt" $p2.Address = New-Address $p2.Address.Number = 17 $p2.Address.Street = "Cherry Tree Lane" $p2.Address.City = "London" $p2 # Result Address Name ------- ---- Number 17, Cherry Tree Lane Mary @{City=London; Country=; Number=17; State=; Street=Cherry Tree Lane} Burt




{ 1 comment… read it below or add one }
Youre indeed right on this writing!