2016-04-06 25 views
5

今日のアクセス修飾子「特定のクラス許可」ありません、プログラミング言語では、これらのよく知られたアクセス修飾子を持っています。しかし時には私がOOPのやり方でプログラムを書くときに、私はアクセスを許可したいクラスを手動で指定することができる '特別な'修飾子を必要とすると思います。なぜプログラミング言語が

は今、私は言語設計者は、プログラミング言語、多分OOPの概念との競合、または困難な程度に、そのような修飾子を追加しない理由を知りたいですか?答えを

感謝:)

P.S.申し訳ありませんが同じ質問がすでに尋ねられている場合。

答えて

2

C#とVB.Netは、両方の指定されたアセンブリは、指定されたアセンブリの内部のメンバーにアクセスすることができfriend assembliesの概念を、持っています。これにより、特定の発信者に暫定的なアクセスを許可することができます。これはコンパイル時にチェックされます。

フレンドとして明示的に指定したアセンブリのみ、フレンド(Visual Basic)または内部(C#)の種類とメンバーにアクセスできます。たとえば、アセンブリBがアセンブリAのフレンドであり、アセンブリCがアセンブリBを参照する場合、CはAのフレンド(Visual Basic)または内部(C#)タイプにアクセスできません。

現実にはあなたが悪臭のコードを開発している場合を除き、(少なくともこれらの言語で)この機能の正当な使用は制限されています。

しかし、それを呼び出すことができ、クラス定義のアイデアはOOPのカプセル化と抽象化ルールに違反境界線である、と述べました。クラスに呼び出し元を指名できるようにすることで、クラスがその領域を超えた知識を持つことを可能にし、ウィンドウから優れたデザインを投げています。どのように呼び出し者が呼び出す必要がありますが、を呼び出す必要がありますクラスを指示することができます。

は、私はそれがやや役に立てば幸い - 個人的に、私はより多くの学術的言語指向の人から回答を楽しみにしています。

1

まあ、Scalaはあなたがアクセスを制限することができますto specific packages or just to an instance of a class you're referring to as 'this'

+0

しかし、これは 'Java'のみですか? 'PHP'、' C#/ C'や他の言語のような別のプログラミング言語を使うとどうなりますか? – Jer

+0

@ C0dekid.php Scalaにのみ適用されます – chester89

+0

これは他の言語の開発者が見てください。とにかくあなたの答えをありがとう@ chester89 – Jer

関連する問題