Pensavate che non si possa scrivere una classe in C# che non derivi da nessun'altra classe, vero? :-) Provate a compilare questo codice:
namespace System
{
  class Object {}
} 
Passando l'assembly all'ildasm, notiamo due cose "strane":
.namespace System
{
  .class private auto ansi beforefieldinit Object
  {
    .method public hidebysig specialname rtspecialname instance void .ctor()
    cil managed
    {
      .maxstack 0
      br.s here
      here: ret
    }
  }
} 
- è sparita la clausa extends [mscorlib]System.Object (dobbiamo prendere sul serio il commento "note that class flags, 'extends' and 'implements' clauses are provided here for information only"? - vedi anche questo altro mio post);
- il costruttore non chiama il costruttore della classe base - magari perché non esiste più una classe base :-)
Se verifichiamo l'assembly con peverify, otteniamo:
[IL]: Error: [token 0x02000002] Type load failed.
Vediamo se riusciamo ad ottenere qualche informazione in più provando a consumare la classe, cioè ad eseguire lo snippet modificato come di seguito:
namespace System
{
  class Object{}
}
class Foo
{
  static void Main()
  {
    System.Console.WriteLine(typeof(System.Object));
  }
} 
Compilando, otteniamo il warning CS1595 (level 1):
warning CS1595: 'object' is defined in multiple places; using definition from '<mia path>\foo.cs'
ed eseguendo, l'errore:
Unhandled Exception: System.TypeLoadException: Could not load type System.Object from assembly Foo, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null because the parent does not exist.
"because the parent does not exist" - ho provato a fare un ri-assembing del codice IL generato dopo il dis-assembling però dopo il dis-assembling del ri-assembling ho ottenuto lo stesso codice IL. Pensavo di vedere la clausa extends [mscorlib]System.Object e invece ho scoperto che questa clausa è implicita per tutte le classi che non estendono un altra classe, tranne il caso in cui la classe si chiami proprio System.Object.
In Visual Basic .NET, non si riesce a compilare:
Namespace System
  Class Object
  End Class
End Namespace 
perché otteniamo l'errore BC2010: 
Command line error BC2010 : compilation failed : '0xC0000005'
Non ho capito perché "command line".
(Aggiornamento 20/04/05): e questo 0xC0000005 ha odore di "access violation"