Class Visual C++ .NET

#include "stdafx.h"
using namespace System;
ref class Base
{
   public:
     Base() { }
     ~Base() {  Console::WriteLine("~Base"); this->!Base(); }
     !Base() {  Console::WriteLine("!Base"); }
};
ref class Derived : Base
{
   public:
     Derived() { }
     ~Derived() {  Console::WriteLine("~Derived"); this->!Derived(); }
     !Derived() {  Console::WriteLine("!Derived"); }
};
void F()
{
   Derived d;
}
void G()
{
   Derived^ dh = gcnew Derived();
}
int main()
{
   F();
   G();
   Console::WriteLine("Collecting after G()");
   GC::Collect();
}