Virtual method tables

The "virtual function table" or "virtual method table" is a list of method pointers that each class has. It contains pointers to the virtual methods in the class.

Each instance of a class has a pointer to the table, which is used when you call a virtual method from the instance. This is because a call to a virtual method should call the method associated with the class of the actual object, not the class of the reference to the object.

If you for example have an object reference to a string:

object obj = "asdf";

and call the virtual method ToString:

string text = obj.ToString();

it will use the String.ToString method, not the Object.ToString method. It's using the virtual method table of the String class (which the pointer in the string instance is pointing to), not the virtual method table of the Object class.


The C# virtual function table works basically the same as the C++ one, so any resources which describe how the C++ virtual function table works should help you pretty well with the C# one as well.

For example, Wikipedia's description is not bad.


The definition for Virtual Function Table (often call vtable) is the same in C# and C++. It is an lookup table use internally by the runtime to achieve the polymorphic behaviors of abstract/virtual/override method.

In simple you can imagine a base class with a virtual methodA will have a vtable that contains methodA. When derived class override methodA, the vtable for methodA inherits from the parent class but will now points to the methodA in the derived class rather than parent class.