Строгая типизация и безопасность
Типобезопасный код обращается только к тем ячейкам памяти, которые разрешены ему для доступа (в данном разделе под строгой типизацией подразумевается строгая типизация памяти, которую не следует путать со строгой типизацией в широком смысле). Например, типобезопасный код не может считывать значения из закрытых полей другого объекта. Он использует для доступа к типам только допустимые, четко определенные методы.
Во время JIT-компиляции может выполняться процесс проверки метаданных и кода MSIL метода, компилируемого в машинный код. Эта проверка позволяет удостовериться в том, что данные являются типобезопасными. Этот процесс не выполняется, если код имеет разрешение на пропуск проверки. Дополнительные сведения об проверке см. в разделе Процесс управляемого выполнения.
Хотя проверка строгой типизации необязательна для запуска управляемого кода, строгая типизация играет ключевую роль в изоляции сборок и обеспечении безопасности. Если код типобезопасен, среда CLR может полностью изолировать сборки друг от друга. Подобная изоляция позволяет защитить сборки от неблагоприятного воздействия со стороны других сборок, а также повышает надежность приложений. Типобезопасные компоненты могут без проблем выполняться в рамках одного процесса, даже если у них разные уровни доверия. Если код не является типобезопасным, могут возникать нежелательные побочные эффекты. Например, среда выполнения не может воспрепятствовать вызову машинного (неуправляемого) кода со стороны неуправляемого кода и выполнению нежелательных операций. Если код типобезопасен, то механизм обеспечения безопасности, предусмотренный в среде выполнения, следит за тем, чтобы он не обращался к машинному коду без соответствующего разрешения. Код, не являющийся типобезопасным, может быть выполнен, только если ему предоставлено разрешение SecurityPermission с переданным значением перечисления SkipVerification.
См. также
Основные понятия
Написание проверяемого строго типизированного кода