mamy sobie DLL-kę z jedną klasą statyczną, jedną metodą statyczną, wyświetlającą inta:

public ref class Klasa abstract sealed
{
    public: static void ShowInt(int^ i)
    {
       System::Console::WriteLine(*i);
    }
};

skompilować przez cl /LD /clr:safe coby nikt nie powiedział że to jakieś unsafe jest.

Teraz błędny program w C#:

class Program
{
  static void Main()
  {
     Klasa.ShowInt(2.5f); // float!
  }
}

który się kompiluje i wywala, oraz jego odpowiednik w C++:

int main()
{
    Klasa::ShowInt(2.5f); // float!
}

który się nie kompiluje.

Po zmianie w DLL-ce linii

       System::Console::WriteLine(*i);

na System::WriteLine(i);

program w C# zaczyna działać, i wyświetla 2,5 (a funkcja ShowInt podobno wyświetla inta).

Wniosek: bezpieczeństwo typów bezpieczeństwem, ale jak bardzo chcieć to w .Net strzelić sobie w nogę nadal można. I to wszystko w ramach kodu “safe”.