代码之家  ›  专栏  ›  技术社区  ›  Binoj Antony

在.NET中,当将类实例/接口作为参数传递时,是传递一个对象还是传递完整的vtable

  •  3
  • Binoj Antony  · 技术社区  · 16 年前

    如果将接口或类的实例作为参数传递,是传递多个对象还是传递完整的vtable,因为一旦对实例调用方法,它就需要递归vtable并正确调用相应的vtable?
    这是怎么工作的?

    4 回复  |  直到 16 年前
        1
  •  6
  •   Jon Skeet    16 年前

    您正在传递一个引用(按值)。引用的精确表示是特定于实现的,但在大多数情况下,它将是一个指针:)

    http://yoda.arachsys.com/csharp/parameters.html 更多细节。

    (我现在正在打电话——如果有人能重新格式化链接,那会有帮助:)

        2
  •  1
  •   OregonGhost    16 年前

    您最终要传递一个指向对象的指针,该对象包含指向vtable的指针。基本上。

        3
  •  1
  •   thecoop    14 年前

    我已经写了一系列的文章来说明在IL中调用一个方法到底会发生什么。这个系列开始于 http://www.simple-talk.com/community/blogs/simonc/archive/2010/11/01/95464.aspx

    简而言之,本机大小的指针被推送到堆栈上,堆栈在对象实例开始时指向堆(同步块索引,后跟类型指针,后跟实例的字段值)。clr通过类型指针到达vtable。

        4
  •  0
  •   Brann    16 年前

    这是一个实现细节,所以我认为你不应该依赖它!:)

    顺便说一句,没有“在参数中传递接口”这样的东西。您总是传递一个对象引用,该对象引用可以实现无、一个或多个接口。