【问题标题】:How's memory allocated for a dynamic variable .net 4.0?如何为动态变量 .net 4.0 分配内存?
【发布时间】:2013-09-16 11:24:57
【问题描述】:

dynamic 是隐式还是显式类型分配?在以下示例的上下文中,动态变量如何在运行时发生内存分配。

对类型安全的动态影响,因为 C# 是类型安全语言。

public class Program
{
    static void Main(string[] args)
    {                                                
        dynamic dynamicVar = 10;
        dynamicVar = true;
        dynamicVar = "hello world";
        // compiles fine
        int index = dynamicVar.IndexOf("world");                        
    }        
} 

【问题讨论】:

标签: .net c#-4.0


【解决方案1】:

就 CLR 而言,dynamic 类型的变量实际上是 object 类型的变量。它只影响编译器,它使任何使用dynamic 表达式的操作都经过执行时绑定。

绑定过程本身将使用额外的局部变量等(看看 ILDASM、Reflector 或类似的东西,你会感到困惑)但就dynamicVar 本身而言,你得到的代码就像拥有object 变量 - 对 intbool 值进行适当的装箱。

【讨论】:

  • 谢谢 Jon .. 但我想在上面的代码中问一个问题,在运行时编译器使用反射来理解基于值的类型并评估方法“IndexOf”或直接转换基于类型关于值类型。
  • @Deepak:是的,它基本上使用反射。 (对于实现 IDynamicMetaObjectProvider 的类型,它会做完全不同的工作,但对于“简单”类型,它实际上只是反射。)
猜你喜欢
  • 2023-03-02
  • 1970-01-01
  • 1970-01-01
  • 2014-06-16
  • 2020-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多