Я просто вставил ваш код в компилятор и запустил дизассемблер на dll.
.method private hidebysig instance void Foo() cil managed
{
// Code size 6 (0x6)
.maxstack 1
.locals init ([0] class ProjectEuler.P1/P2/P3 p3,
[1] class ProjectEuler.P1/P2 p2)
IL_0000: nop
IL_0001: ldarg.0
IL_0002: stloc.0
IL_0003: ldarg.0
IL_0004: stloc.1
IL_0005: ret
}// end of method P3::Foo
Итак, глядя на сгенерированный IL, я чувствую, что «this» представляет p2, хотя технически это p3.Но P3 также является P2, потому что P3 происходит от P2.
Это мое понимание.Пожалуйста, поправьте меня, если я ошибаюсь.