#include "stdafx.h"
using namespace System;
ref class MyClass{
public:
virtual void f() { Console::WriteLine("MyClass::f"); }
virtual void g() { Console::WriteLine("MyClass::g"); }
};
interface class MyInterface{
void f();
void g();
};
ref class C : MyClass, MyInterface{
public:
virtual void f() new{
Console::WriteLine("C::f");
}
virtual void g() override{
Console::WriteLine("C::g");
}
};
int main()
{
MyClass^ b = gcnew MyClass();
C^ c = gcnew C();
MyInterface^ i = c;
b->f(); // calls MyClass::f
c->f(); // calls C::f
i->f(); // calls C::f since C::f implements MyInterface::f
MyClass^ bc = c; // b pointing to instance of C
bc->f(); // calls MyClass::f since C::f is unrelated
b->g(); // calls MyClass::g
c->g(); // calls C::g
i->g(); // calls C::g since C::g implements MyInterface::g
bc->g(); // calls C::g since C::g overrides MyClass::g
}