C# 4.0 Dynamic Programming

Tuesday, October 6, 2009





C# 4.0 supports Dynamic Programming by introducing new Dynamic Typed Objects. The type of these objects is resolved at run-time instead of compile-time. A new keyword dynamic is introduced to declare dynamic typed object. The keyword tells the compiler that everything to do with the object, declared as dynamic, should be done dynamically at the run-time using Dynamic Language Runtime(DLR). Remember dynamic keyword is different from varkeyword. When we declare an object as var, it is resolved at compile-time whereas in case of dynamic the object type is dynamic and its resolved at run-time. Let’s do some coding to see advantage of Dynamic Typed Objects :)


A year back I wrote a code of setting property of an object using Reflection:


1: Assembly asmLib= Assembly.LoadFile(@"C:\temp\DemoClass\bin\Debug\DemoClass.dll");

2: Type demoClassType = asmLib.GetType("DemoClass.DemoClassLib");

3: object demoClassobj= Activator.CreateInstance(demoClassType);

4: PropertyInfo pInfo= demoClassType.GetProperty("Name");

5: pInfo.SetValue(demoClassobj, "Adil", null);

Notice line 3-5 creates instance of ‘demoClassType’ and set property ‘Name’ to ‘Adil’. Now with C# 4.0 line # 3-5 can be written as simple as:


dynamic dynamicDemoClassObj = Activator.CreateInstance(demoClassType);

dynamicDemoClassObj.Name = "Adil";

Simple isn’t it? Let’s see a slide from Anders Hejlsberg’s session at PDC 2008:




From the above slide, you can call method(s) such as x.ToString(), y.ToLower(), z.Add(1) etc and it will work smoothly :)


This feature is great and provides much flexibility for developers. In this post, we explore the dynamic typed object in C# 4.0. We will explore dynamic in detail and other features as well in the coming posts. Of course there are pros and cons of dynamic programming as well but where C# is going is something like having features of both static languages and dynamic languages.



dynamic d = 1;

var testSum = d + 3;

// Rest the mouse pointer over testSum in the following statement.

System.Console.WriteLine(testSum)


Conversions


Conversions between dynamic objects and other types are easy. This enables the developer to switch between dynamic and non-dynamic behavior.


Any object can be converted to dynamic type implicitly, as shown in the following example

C#

dynamic d1 = 7;

The dynamic language runtime (DLR) is a new API in .NET Framework 4 Beta 1. It provides the infrastructure that supports the dynamic type in C#, and also the implementation of dynamic programming languages such as IronPython and IronRuby. For more information about the DLR, see Dynamic Language Runtime

dynamic d2 = "a string";



The dynamic language runtime (DLR) is a new API in .NET Framework 4 Beta 1. It provides the infrastructure that supports the dynamic type in C#, and also the implementation of dynamic programming languages such as IronPython and IronRuby. For more information about the DLR, see Dynamic Language Runtime

dynamic d3 = System.DateTime.Today;

dynamic d4 = System.Diagnostics.Process.GetProcesses();

share this post
Share to Facebook Share to Twitter Share to Google+ Share to Stumble Upon Share to Evernote Share to Blogger Share to Email Share to Yahoo Messenger More...

4 comments:

Zeeshan Hanif said...

Cool little post:-) Keep it up...

Muhammad Ahmad said...

There are many performance implications when using DLR, however, Reflection based codes are much cleaner now.

In fact, DLR opens up dynamic type casting, where we don't know what the type of an object will be in advance. This helps with programming things like ORM tools.

However, DLR is a double-edged sword. New programmers, shouldn't even be told that it exists as it creates a mess of a code, if abused.

Usama Wahab Khan said...

there is some many use of dynamic data type it will help`s in ORM , calling static member or function and also form memory management

Basmah said...

Very good work,
I would like to see an article on WCF.
Please help me on it
Jazakallah