There are numerous definitions for early and late binding. Some are technical, some are theoretical. I will try to define it from both viewpoints.
Variables and expressions can be assigned at compile time or at runtime. Compile time (declaration time) assignment is called:
- early binding
- static binding
- static typing
An example for early binding:
1: ' Create a variable to hold a new object.
2: Dim FS As System.IO.FileStream3: ' Assign a new object to the variable.
4: FS = New System.IO.FileStream("C:\tmp.txt", _5: System.IO.FileMode.Open)
Runtime assignment is called dynamic binding or late binding, when the type of the variable or expression is determined by the current (application) conditions. An example for late binding:
1: ' To use this example, you must have Microsoft Excel installed on your computer.
2: ' Compile with Option Strict Off to allow late binding.
3: Sub TestLateBinding()
4: Dim xlApp As Object5: Dim xlBook As Object6: Dim xlSheet As Object7: xlApp = CreateObject("Excel.Application")
8: ' Late bind an instance of an Excel workbook.
9: xlBook = xlApp.Workbooks.Add10: ' Late bind an instance of an Excel worksheet.
11: xlSheet = xlBook.Worksheets(1)12: xlSheet.Activate()13: ' Show the application.
14: xlSheet.Application.Visible = True
15: ' Place some text in the second row of the sheet.
16: xlSheet.Cells(2, 2) = "This is column B row 2"
17: End Sub
Another example for late binding:
1: Dim MyVariable As Object2: MyVariable = "About Visual Basic"
3: Debug.WriteLine("The variable data type is: " & MyVariable.GetType.ToString)4: MyVariable = #6/30/2006#5: Debug.WriteLine("The variable data type is: " & MyVariable.GetType.ToString)
The result for the code above:
The variable data type is: System.String The variable data type is: System.DateTime |
As you can see, the variable named MyVariable can represent a System.String and a System.Date in the code above.
Despite of the advantages of late binding, early binding is recommended:
- Early binding code can be optimized better by the compiler, so it runs (much) faster
- It is usually easier to read early binding code (known types, etc.)
- Automatic code completion, Dynamic Help and other advanced IDE features are available only for early binding codes
- Compiler can type 'compatibility' for early binding variables and expressions
- Application constants are accessible (e.g. in MS Word)
Some advantages of late binding:
- Version independence. E.g. in case of MS Word, programming against Word 97 and changing code libraries to Word 2000 can be smooth and automatic.
- More references can mean more linking and bigger file size (in case of unmanaged code)
There are numerous methods in C# to use late binding. Most of them employs reflection and dynamic compilation. There will be late binding as a language feature from C# 4.0 specification. Late binding will be as simple as the following:
Late binding will be achieved by the dynamic keyword.1: dynamic d = GetDynamicObject();2: d.Foo();
No comments:
Post a Comment