CSharp - Type Creation dynamic type


Dynamic binding defers binding operations from compile time to runtime.

A dynamic type is declared with the contextual keyword dynamic:

dynamic d = GetSomeObject();

The existance of Walk method is verified during the runtime not the compile time.


using System;
using System.Dynamic;

public class Test
       static void Main()
       {//ww  w  .j  a  v  a  2 s .c o m
         dynamic d = new Person();
         d.Walk();                  // Walk method was called
         d.Talk();                 // Talk method was called

public class Person : DynamicObject
       public override bool TryInvokeMember (
         InvokeMemberBinder binder, object[] args, out object result)
         Console.WriteLine (binder.Name + " method was called");
         result = null;
         return true;


Dynamic Conversions

The dynamic type has implicit conversions to and from all other types:

int i = 7;
dynamic d = i;
long j = d;        // No cast required (implicit conversion)

The preceding example worked because an int is implicitly convertible to a long.

The following example throws a RuntimeBinderException because an int is not implicitly convertible to a short:

int i = 7;
dynamic d = i;
short j = d;      // throws RuntimeBinderException