Consider this case: C++: `static Base getBase() { return Derived(); }` C#: `Base b = Base.getBase(); b.virtual();` Since we're not generating code to go through the virtual table in `Base` we'll not have the expected polymorphic behaviour.