2009-10-26 1 views
2

C#에서 "내부"클래스 또는 메서드는 해당 어셈블리가있는 어셈블리에서만 호출 할 수 있습니다 ... 루비에는 "어셈블리"또는 실제 패키지와 같은 종류가 없습니다 (보석이 아닌 그들은 전혀 똑같은 것은 아닙니다.)하지만, 내부와 비슷한 메소드가 호출 될 수있는 위치를 제한하는 방법이 있는지 궁금합니다.루비는 C#의 내부 키워드와 동일합니까?

작은 프레임 워크를 업데이트하고 3 가지 방법이있는 클래스를 만들었습니다. 내 프레임 워크에서만 3 가지 방법 중 2 가지를 호출 할 수 있기를 원하며 어디에서나 세 번째 방법을 호출 할 수 있기를 원합니다. Ruby에서 가능합니까? 또는 나는이 잘못에 대해 이야기하고 두 개의 별도 수업을 만들어야합니까? 또는?

+0

메소드를 호출하는 사람을 "정말로"막아 버리려는 시도는 없습니다. 액세스 지정자에 관계없이 모든 메소드에 'send'를 보내고 실행할 수 있습니다. – Geo

답변

2

불행히도 루비는 캡슐화면에서 부족한 언어입니다. 용량이 상당히 제한되어 있으므로 C# 내부 키워드와 동일한 것이 없습니다. 어쩌면 두 개의 별도 클래스가 더 좋을지도 모르겠지만 명확한 docstring 또는 특수 명명 체계는 많은 수정 작업없이 동일하게 수행 할 수 있습니다.

또한 내부 키워드는 라이브러리 개발자에게 편의를 제공한다는 점에 유의해야합니다. 누군가가 메소드 나 클래스를 내부적으로 사용하는 것을 막지는 않습니다. 코드 삽입, AOP 등으로 이러한 보호를 우회 할 수있는 방법이 있습니다.