私は現在、独自の小さな言語を書いており、アクセス修飾子がメンバーのブロックに適用されるC++スタイルと、アクセス修飾子がすべてに個別に指定されるC#/ Javaスタイルとの違いを検討していますメンバー。私はどちらが良いか尋ねるつもりはありません。私はそれが非常に意見に基づいていることに気づきました。
C#が各メンバーにアクセス修飾子を必要とするのはなぜですか?
私はC#だけに焦点を当てようとしているのではありません-Javaまたは他の言語の規則に従っている可能性があります。その場合、質問は「なぜになるのでしょうか?」その言語は各メンバーにアクセス修飾子を必要としますか?」
言語のデザイナーが各構文の背後にある長所と短所について議論しているドキュメントやサポートの引用などを探しています。私はGoogleを見て回りましたが、何も見つかりませんでしたが、Stack Overflowの一部のメンバーが実際に.Net開発チームの一員であったことを承知しているので、ここで答えます。
C#とJava-C++とは異なる-デザイナーが各メンバーにアクセス修飾子を持つことを選択する理由はかなり明白です。C++では、アクセス修飾子はクラスのヘッダーファイルで使用されます排他的に、それらがめったに1行または2行を必要としないメンバー署名に適用される場合、パブリック、保護、プライベートメンバーのセクションでそれらをグループ化することが賢明であり、管理可能です。実装ファイル内のメンバーの順序は、ヘッダーファイルで使用されるもの。
しかし、クラスのコードがヘッダーファイルと実装ファイルに分割されていない言語では、「C++」のような構文の「セクション」アクセス修飾子は、適用されるセクションが読みにくいため、読みにくくなり、エラーが発生しやすくなります。ずっと長くなるでしょう。
C#またはJava C++のようなアクセス修飾子を使用したコードは、次のようになります。
class MyClass
{
public: // or protected, internal, or private
// ~100 lines of different methods of the same access level
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ~ still these methods
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// even more code of these methods
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// ...
// and now, for the next method to implement here, one has to scroll back 100 lines
// to find out about the active access modifier.
これが可読性と保守性にどのように影響するかを説明する必要はないと思います。