我们在编写 C# 程序时,往往需要动态确定某个对象的类型,并调用该类型上的某个特定方法。如我们将一个 string 变量存储在 Session 中,iaoshi要使用这个变量时,由于 Session 的 get 方法只能返回 object,所以如果要调用在 string 上的实例方法时,先要将此 object 转化为 string。如下代码所示。
- class Test
- {
- public void Foo()
- {
- var myValue = "Hello!";
- Session["Value"] = myValue;
- }
- public void Bar()
- {
- string value = Session["Value"] as string;
- if (!string.IsNullOrEmpty(value))
- {
- var result = value.LastIndexOf("!");
- }
- }
- }
在 C# 4 中,有一种称为动态查找(Dynamic Lookup)的特性,使用动态查找,我们可以将以 object 类型表示的继承类型对象实例方法在 object 上使用。编译器会动态从该对象的运行时类型检索信息,从而正常调用该类型上的方法。
- class Test
- {
- public void Foo()
- {
- var myValue = "Hello!";
- Session["Value"] = myValue;
- }
- public void Bar()
- {
- dynamic
- {
- object value = Session["Value"];
- int result = value.LastIndexOf("!");
- }
- }
- }
在 Visual Basic 中,已经实现了此动态查找功能。
- Public Sub Foo()
- Dim o As Object = Session("Value")
- Dim result As Integer = o.LastIndexOf("!")
- End Sub
该功能针对于 COM 调用,Office 自动化都非常有帮助。