变量如何知道它实现的类型?

aus*_*ush 4 c#

据我所知,每个变量都知道它的运行时类型.

这是一个例子:

void Main()
{
    C c = new C();
    c.M();
    I i = (I)c;
    i.M();
}

public interface I
{
    void M();
}

public class C : I
{
    void I.M() 
    {
        Console.WriteLine("I.M");
    }

    public void M() 
    {
        Console.WriteLine("M");
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,i仍然知道它的类型是C.那么,i决定使用I.M而不是M?的机制是什么?

sll*_*sll 8

在内部,每个对象都有自己的TypeHandle,请参阅下面的对象内部结构:

MSDN - 深入了解.NET Framework内部,了解CLR如何创建运行时对象

在此输入图像描述