Чтобы понять, почему это вообще плохая идея, взгляните на статью Не блокировать объекты типа .
Это разрешено, потому что разработчики языка / фреймворка решили иметь возможность блокировать все, что происходит от System.Object
. Никто не может предотвратить это, потому что System.Type
происходит от System.Object
(как и любой другой тип .NET).
Возьмите эту подпись:
void Foo(object o)
Как компилятор может принудительно установить, что o
не System.Type
? Конечно, вы можете проверить это во время выполнения, но это повлияет на производительность.
И, конечно, могут быть супер-экзотические ситуации, когда может потребоваться заблокировать тип. Может быть, CLR делает это внутренне.