Компилятор C# и IL, безусловно, поддерживают типы как постоянные выражения, по крайней мере в определенных ситуациях. Посмотрите на атрибуты, они используют это много:
[DebuggerTypeProxy(typeof(Mscorlib_CollectionDebugView<>))]
Тип встраивается в виде строки в компилятором кода, выше строка компилируется следующий код IL:
.custom instance void System.Diagnostics.DebuggerTypeProxyAttribute::.ctor(class System.Type) = (
01 00 39 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63
74 69 6f 6e 73 2e 47 65 6e 65 72 69 63 2e 4d 73
63 6f 72 6c 69 62 5f 43 6f 6c 6c 65 63 74 69 6f
6e 44 65 62 75 67 56 69 65 77 60 31 00 00
)
Если вы осмотрите бинарные данные, вы заметите, что это полное имя класса без какой-либо идентификации сборки (System.Collections.Generic.Mscorlib_CollectionDebugView`1).
Чтобы ответить на ваш вопрос: я не вижу каких-либо технических причин, почему это не должно быть возможным, и я не могу представить себе соображения совместимости, которые предотвращают его, поскольку нет ссылки на серию, и поэтому DLL, объявляющая этот тип, все еще может быть обновлена не затрагивая ранее скомпилированный тип, ссылающийся на него.
Интересно, что заставляет вас задавать этот вопрос, конечно, вы бы не использовали такую константу в реальном коде? – MarioDS
Для этой цели вместо этого я использую static readonly. –