0% found this document useful (0 votes)
84 views44 pages

Dynamic Binding in C#: Buu Nguyen

This document discusses dynamic binding in C#. It begins by explaining the difference between static and dynamic binding. Dynamic binding occurs at runtime rather than compile time. It is implemented using the Dynamic Language Runtime (DLR), which handles binding and execution. Key uses of dynamic binding include accessing members only known by name at runtime, interoperating with dynamic languages like IronRuby, and allowing objects to determine how they respond to calls. The document also covers restrictions of dynamic binding and provides examples of using it.

Uploaded by

Tiểu Bảo
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
84 views44 pages

Dynamic Binding in C#: Buu Nguyen

This document discusses dynamic binding in C#. It begins by explaining the difference between static and dynamic binding. Dynamic binding occurs at runtime rather than compile time. It is implemented using the Dynamic Language Runtime (DLR), which handles binding and execution. Key uses of dynamic binding include accessing members only known by name at runtime, interoperating with dynamic languages like IronRuby, and allowing objects to determine how they respond to calls. The document also covers restrictions of dynamic binding and provides examples of using it.

Uploaded by

Tiểu Bảo
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 44

Buu Nguyen

DYNAMIC BINDING IN C#

Buu Nguyen
Vice President of Technology, KMS Technology

Lecturer, RMIT University Vietnam


Microsoft MVP

Agenda
What is dynamic binding

How is it implemented
When do we need it

Restrictions of dynamic binding

What is Dynamic Binding

C# Language Evolution

C# 4.0

C# 3.0
C# 2.0
LINQ (*) Auto- properties Collection initializer Object initializer Anonymous types Extension methods Partial methods Lambda expressions Expression trees

C# 1.0

Generics (*) Nullable types Anonymous methods Yield return Partial type Static class Namespace alias

Dynamic binding (*) Named arguments Optional parameters Generic variance Field-like events Robust locking Better COM interop

Static vs. Dynamic Binding


Static Binding
Compiler figures out which

Dynamic Biding
All bindings happen during

members to call (binding process)


Defer subtype polymorphic

run time

resolution till run time

Static Binding

Benefits of Static Binding


Type and name errors are detected at

compile time, e.g.


Invoke non-existent members Pass in arguments with wrong type Perform illegal cast

Dynamic Binding

How Is It Implemented?

Run Time Binding


Instead of attempting binding and generating

CIL, the compiler packages the call and sends it to the Dynamic Language Runtime At run time, the DLR performs binding and execution

Under the Hood

becomes

The Dynamic Language Runtime

Process in a nutshell
C# dynamic
compiled

Dynamic Objects

builds
User-defined or from other languages

Call Sites
cached

uses

IDynamicMetaObjectProvider

Delegate
Expression Tree

emits

DLR
C# Binder builds

Dynamic Type in CIL

When Do We Need It?

Key Scenarios
1. Access a member with only knowledge of its

name, arguments, and target object


2. Interop with dynamic languages, e.g. IronRuby, IronPython
3. Have the target object decide how to

respond to a call at run time

Key Scenarios
1. Access a member with only knowledge of its

name, arguments, and target object


2. Interop with dynamic languages, e.g. IronRuby, IronPython
3. Have the target object decide how to

respond to a call at run time

Access Members

Reflection

Dynamic Type

Single vs. Multiple Dispatch


Single Dispatch
Method is selected based

Multiple Dispatch
Method is selected based

on the runtime type of the target object

on both the runtime type of the target object and those of the methods arguments

Dispatch Example

Key Scenarios
1. Access a member with only knowledge of its

name, arguments, and target object


2. Interop with dynamic languages, e.g. IronRuby, IronPython
3. Have the target object decide how to

respond to a call at run time

Invoke Ruby Code

Work with Ruby Class

Work with method_missing

Key Scenarios
1. Access a member with only knowledge of its

name, arguments, and target object


2. Interop with dynamic languages, e.g. IronRuby, IronPython
3. Have the target object decide how to

respond to a call at run time

The Magic Interface

IDynamicMetaObjectProvider ExpandoObject DynamicObject

ExpandoObject

DynamicObjects Operations
Name TryGetMember TrySetMember TryDeleteMember TryInvokeMember TryConvert TryCreateInstance TryInvoke TryBinaryOperation TryUnaryOperation TryGetIndex TrySetIndex TryDeleteIndex Description Member getter, e.g. obj.Name Member setter, e.g. obj.age = 10 Member removal (no equivalent in C#) Method invocation, e.g. obj.Invoke() Casting, e.g. (int)obj Object creation (no equivalent in C#) Self invocation, e.g. obj(10) Binary operation, e.g. obj + 10 Unary operation, e.g. !obj Indexer getter, e.g. obj[key] Indexer setter, e.g. obj[key] = value Indexer removal (no equivalent in C#)

Log Setters & Invocations

StaticInvoker

StaticInvoker

Close to the metal

Close to the metal

Close to the metal

Restrictions

Restriction #1
Doesnt work with extension methods

Restriction #2
Cant resolve static members or constructors

on a dynamic type

Restriction #3
Method groups, anonymous methods and

lambda expressions to be casted to exact type

Restriction #4

Thank You!
[email protected] http://vn.linkedin.com/in/buunguyen

http://www.twitter.com/buunguyen
http://www.facebook.com/buunguyen

References
DLR specs from

http://dlr.codeplex.com/documentation C# in Depth, 2nd, Jon Skeet, Manning, 2010 Pro DLR in .NET 4.0, Chaur Wu, Apress, 2010

You might also like