SlideShare uma empresa Scribd logo
1 de 44
Baixar para ler offline
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                   Dynamic binding (*)
                                                           Named arguments
                                  LINQ (*)                 Optional parameters
                                  Auto- properties         Generic variance
              C# 2.0              Collection initializer   Field-like events
                                  Object initializer       Robust locking
              Generics (*)        Anonymous types          Better COM interop
              Nullable types      Extension methods
              Anonymous methods   Partial methods
     C# 1.0   Yield return
              Partial type
                                  Lambda expressions
                                  Expression trees
              Static class
              Namespace alias
Static vs. Dynamic Binding

Static Binding                  Dynamic Biding
 Compiler figures out which     All bindings happen during
  members to call (binding        run time
  process)
   Defer subtype polymorphic
     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               builds
 dynamic
                      Objects
                                  User-defined or from other languages
      compiled


               uses   IDynamicMetaObjectProvider
Call Sites

      cached
                                                                                 Delegate
                                                       Expression        emits
                                                          Tree

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                Multiple Dispatch
 Method is selected based      Method is selected based
  on the runtime type of the     on both the runtime type
  target object                  of the target object and
                                 those of the method’s
                                 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
DynamicObject’s Operations
Name                 Description
TryGetMember         Member getter, e.g. obj.Name
TrySetMember         Member setter, e.g. obj.age = 10
TryDeleteMember      Member removal (no equivalent in C#)
TryInvokeMember      Method invocation, e.g. obj.Invoke()
TryConvert           Casting, e.g. (int)obj
TryCreateInstance    Object creation (no equivalent in C#)
TryInvoke            Self invocation, e.g. obj(10)
TryBinaryOperation   Binary operation, e.g. obj + 10
TryUnaryOperation    Unary operation, e.g. !obj
TryGetIndex          Indexer getter, e.g. obj[“key”]
TrySetIndex          Indexer setter, e.g. obj[“key”] = value
TryDeleteIndex       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

 Doesn’t work with extension methods
Restriction #2

 Can’t 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!
buunguyen@kms-technology.com
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

Mais conteúdo relacionado

Mais procurados

Switch statements in Java
Switch statements  in JavaSwitch statements  in Java
Switch statements in Java
Jin Castor
 
Java exception handling
Java exception handlingJava exception handling
Java exception handling
BHUVIJAYAVELU
 

Mais procurados (20)

Learn C# Programming - Encapsulation & Methods
Learn C# Programming - Encapsulation & MethodsLearn C# Programming - Encapsulation & Methods
Learn C# Programming - Encapsulation & Methods
 
Tuples in Python
Tuples in PythonTuples in Python
Tuples in Python
 
Java packages
Java packagesJava packages
Java packages
 
Data structures using c
Data structures using cData structures using c
Data structures using c
 
Polymorphism in C++
Polymorphism in C++Polymorphism in C++
Polymorphism in C++
 
Class and object in C++
Class and object in C++Class and object in C++
Class and object in C++
 
joins in database
 joins in database joins in database
joins in database
 
Packages in java
Packages in javaPackages in java
Packages in java
 
Tree - Data Structure
Tree - Data StructureTree - Data Structure
Tree - Data Structure
 
Type casting in java
Type casting in javaType casting in java
Type casting in java
 
Variables & Data Types In Python | Edureka
Variables & Data Types In Python | EdurekaVariables & Data Types In Python | Edureka
Variables & Data Types In Python | Edureka
 
Linked list
Linked listLinked list
Linked list
 
Hashing in datastructure
Hashing in datastructureHashing in datastructure
Hashing in datastructure
 
Binary Search Tree in Data Structure
Binary Search Tree in Data StructureBinary Search Tree in Data Structure
Binary Search Tree in Data Structure
 
BNF & EBNF
BNF & EBNFBNF & EBNF
BNF & EBNF
 
Operators in java presentation
Operators in java presentationOperators in java presentation
Operators in java presentation
 
9. Input Output in java
9. Input Output in java9. Input Output in java
9. Input Output in java
 
Python: Modules and Packages
Python: Modules and PackagesPython: Modules and Packages
Python: Modules and Packages
 
Switch statements in Java
Switch statements  in JavaSwitch statements  in Java
Switch statements in Java
 
Java exception handling
Java exception handlingJava exception handling
Java exception handling
 

Semelhante a Dynamic Binding in C# 4.0

Introduction to c sharp 4.0 and dynamic
Introduction to c sharp 4.0 and dynamicIntroduction to c sharp 4.0 and dynamic
Introduction to c sharp 4.0 and dynamic
Gieno Miao
 
Dynamic languages for .NET CLR
Dynamic languages for .NET CLRDynamic languages for .NET CLR
Dynamic languages for .NET CLR
py_sunil
 
Component object model and
Component object model andComponent object model and
Component object model and
Saransh Garg
 

Semelhante a Dynamic Binding in C# 4.0 (20)

Introduction to c sharp 4.0 and dynamic
Introduction to c sharp 4.0 and dynamicIntroduction to c sharp 4.0 and dynamic
Introduction to c sharp 4.0 and dynamic
 
C sharp
C sharpC sharp
C sharp
 
PDC Video on C# 4.0 Futures
PDC Video on C# 4.0 FuturesPDC Video on C# 4.0 Futures
PDC Video on C# 4.0 Futures
 
New c sharp4_features_part_iv
New c sharp4_features_part_ivNew c sharp4_features_part_iv
New c sharp4_features_part_iv
 
C#4.0 features
C#4.0 featuresC#4.0 features
C#4.0 features
 
Dynamic languages for .NET CLR
Dynamic languages for .NET CLRDynamic languages for .NET CLR
Dynamic languages for .NET CLR
 
Presentation On Com Dcom
Presentation On Com DcomPresentation On Com Dcom
Presentation On Com Dcom
 
C Course Material0209
C Course Material0209C Course Material0209
C Course Material0209
 
201005 accelerometer and core Location
201005 accelerometer and core Location201005 accelerometer and core Location
201005 accelerometer and core Location
 
How To Code in C#
How To Code in C#How To Code in C#
How To Code in C#
 
C# 3.0 and 4.0
C# 3.0 and 4.0C# 3.0 and 4.0
C# 3.0 and 4.0
 
Basics of c# by sabir
Basics of c# by sabirBasics of c# by sabir
Basics of c# by sabir
 
internet
internetinternet
internet
 
Dynamic Language Performance
Dynamic Language PerformanceDynamic Language Performance
Dynamic Language Performance
 
NDK Primer (AnDevCon Boston 2014)
NDK Primer (AnDevCon Boston 2014)NDK Primer (AnDevCon Boston 2014)
NDK Primer (AnDevCon Boston 2014)
 
Component object model and
Component object model andComponent object model and
Component object model and
 
DLR MCQs
DLR MCQsDLR MCQs
DLR MCQs
 
C# advanced topics and future - C#5
C# advanced topics and future - C#5C# advanced topics and future - C#5
C# advanced topics and future - C#5
 
Lecture4 corba
Lecture4   corbaLecture4   corba
Lecture4 corba
 
NDK Primer (Wearable DevCon 2014)
NDK Primer (Wearable DevCon 2014)NDK Primer (Wearable DevCon 2014)
NDK Primer (Wearable DevCon 2014)
 

Mais de Buu Nguyen (10)

On Becoming a Technical Lead
On Becoming a Technical LeadOn Becoming a Technical Lead
On Becoming a Technical Lead
 
Stories about KMS Technology
Stories about KMS TechnologyStories about KMS Technology
Stories about KMS Technology
 
ASP.NET MVC 3
ASP.NET MVC 3ASP.NET MVC 3
ASP.NET MVC 3
 
HTML5 in IE9
HTML5 in IE9HTML5 in IE9
HTML5 in IE9
 
ASP.NET MVC 2.0
ASP.NET MVC 2.0ASP.NET MVC 2.0
ASP.NET MVC 2.0
 
Building Scalable .NET Web Applications
Building Scalable .NET Web ApplicationsBuilding Scalable .NET Web Applications
Building Scalable .NET Web Applications
 
New Features of ASP.NET 4.0
New Features of ASP.NET 4.0New Features of ASP.NET 4.0
New Features of ASP.NET 4.0
 
C# 4.0 and .NET 4.0
C# 4.0 and .NET 4.0C# 4.0 and .NET 4.0
C# 4.0 and .NET 4.0
 
Combres
CombresCombres
Combres
 
Fasterflect
FasterflectFasterflect
Fasterflect
 

Último

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Último (20)

Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 

Dynamic Binding in C# 4.0