2010-07-21 2 views
5

Мой мой друг всегда говорит мне, что если мы объявим что-либо как «общедоступное», тогда это опасно, потому что любая программа может получить доступ к этой памяти и что решение должно использовать «частный» модификатор доступа.Указывает ли переменная как «частную» в C# защищать память в окнах от доступа к сканеру памяти?

Мне интересно, правда ли это.

+2

Похоже, что ваш товарищ по работе плохо понимает объектно-ориентированное программирование, и вы можете захотеть приобрести для него базовый материал для чтения, чтобы он мог понять природу программирования. – thaBadDawg

ответ

9

То, что не, по сути, правда.

Модификаторы доступа предназначены только для организации вашего кода. Они только защищают его в том смысле, что вы защищаете свой стакан от удара, устанавливая его вне досягаемости кошки.

+1

+1 для Joviee - общедоступный/частный - спецификаторы доступа к классу/члену. Однако ваш собеседник может намереваться передать, что если класс/члены ur объявлены как общедоступные, на самом деле их можно получить любым другим классом, который может быть нежелательным. – InSane

+3

+1 за правду, но добавил некоторые практические объяснения тем, кто не понимает «почему». –

+0

Спасибо Rex M. Отличная аналогия! – MatthewKing

-1

Модификаторы C# не влияют на адресность памяти - процессор и архитектура ОС управляют этим.

+1

Если это так, это было бы смешно. Если это не так, это очень унизительно и грубо. –

+0

Забавный, ваш gravatar не показывает превосходство вашего шеи. На самом деле, похоже, у вас нет шеи-седла! Заставляет меня подозревать, что ваш braggadocio что-то скрывает ... – Will

+0

+1: Интересно то же самое. –

2

public и private модификаторы доступа относятся только к видимости этих структур (классов, методов или переменных) для других классов в одном приложении. Операционная система обеспечивает защиту памяти между процессами и пользователями. В случае Windows это гарантирует, что процессы/потоки (или системные звонки) неадминистративного уровня не имеют доступа к памяти, которая явно не разделена (например, разделяемая память) с открытыми разрешениями. Фактически, Windows позволяет процессам предоставлять очень конкретные права на определенные области памяти, но это не предусмотрено в определении языка C#. Вам нужно будет получить доступ к системным API-интерфейсам, чтобы управлять предоставлением таких видов доступа к определенным блокам памяти; по умолчанию все блоки памяти защищены ОС.

Теперь, если сканер памяти работает в кольце-0 или с определенными повышенными привилегиями, вы ничего не можете сделать в своем процессе, чтобы заблокировать этот доступ.

+0

На самом деле процессы нормального пользователя обычно имеют доступ к памяти других процессов с одинаковым уровнем пользователя/целостности. – SamB