2009-10-26 6 views
2

в C# «внутренний» класс или метод может быть вызван только внутри сборки, в которой он находится ... Я знаю, что Ruby не имеет «сборок» или какого-либо реального пакета, подобного им (кроме драгоценных камней, но они совсем не то же самое), но мне интересно, есть ли способ ограничить местоположение, из которого можно вызвать метод, подобно внутреннему?рубиновый эквивалент внутреннего ключевого слова C#?

Я обновляю небольшую структуру и создаю класс, на котором есть 3 метода. Я хочу, чтобы иметь возможность вызывать 2 из 3 методов только из моей структуры, а третий - из любого места. Возможно ли это в рубине? или я собираюсь сделать это неправильно и должен создавать два отдельных класса? или ?

+0

В любом случае «действительно» не может заставить кого-либо вызвать метод. Вы можете «отправить» любому методу и выполнить его независимо от спецификатора доступа. – Geo

ответ

2

К сожалению, Ruby - это язык, который не хватает в плане инкапсуляции. Это пропускная способность там довольно ограничена, поэтому нет, ничто не эквивалентно внутреннему ключевому слову C#. Возможно, в вашем случае два отдельных класса были бы лучше, но четкая докштрина или специальная схема именования могли бы сделать то же самое без тяжелых изменений.

Кроме того, вы должны отметить, что внутреннее ключевое слово - не что иное, как удобство для разработчиков библиотек. Это действительно не мешает кому-либо использовать метод или класс, помеченные как внутренние, есть способ обойти эту защиту с помощью инъекции кода, АОП и т. Д.

Смежные вопросы