C#属性:它们是如何实例化的?

Ped*_*ery 1 .net compilation properties

这可能是一个非常简单的问题,但我正在尝试理解编译的一些内部工作原理.

非常简单地说,想象一个任意对象被实例化.然后在堆上分配此对象.该对象具有PointF类型的属性(值类型),具有get和set方法.

想象一下get和set方法包含一些用于完成工作的计算.如何以及在何处(堆栈/堆)以及何时实例化此代码?


这是这个问题的背景:

我正在为一个对象编写get和set方法,并且需要非常频繁地访问这些方法.get和set代码本身相当庞大,所以我担心在最糟糕的情况下,这些方法会被实例化为一个对象或一个值类型,每个内部代码都可以访问该属性.另一方面,代码可能在创建主对象时被实例化,并且简单地告诉CPU将jmp指向属性代码start.无论如何,这是我想澄清的.

Joh*_*ers 8

方法(或属性)不会被实例化.你似乎在思考我曾经做过的事情 - 创建一个类的实例不仅为数据分配空间,而且为代码分配空间.这不是真的.

即使在C++中,它的工作方式是分配数据,以及指向函数指针数组的指针 - 虚函数表或vtable.vtable中的条目将指向虚方法.非虚方法不需要vtable中的条目.

在任何一种情况下,只有一个代码副本,无论实例化了多少个对象.