問題タブ [access-specifier]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
435 参照

c++ - メソッドをインターフェースで公開し、実装で保護することの利点は何ですか?

私の C++ アプリケーションには、次のようなインターフェイスがあります。

次のようなこのインターフェイスの実装があります。

今、私の同僚はこれについて不平を言い、calculateValue メソッドを保護したほうがよいと私に言いました。そうすれば、呼び出し元が直接の実装ではなく、常にインターフェイスを介して渡されることを保証できます。

これは正しい観察ですか?インターフェイスの実装を保護する方が本当に良いのでしょうか? それとも非公開にすることすらできないのですか?

0 投票する
3 に答える
2864 参照

ruby - ruby では、なぜ include がプライベートで、extend がパブリックなのですか?

ruby では、パブリックであるのincludeにプライベートである理由は何ですか?Object#extend

0 投票する
7 に答える
38394 参照

ruby - Ruby のプライベート メソッドを理解する

これはもちろん機能しません。明示的な受信者 - Example ( e) のインスタンスを指定したためです。これは「プライベート ルール」に違反しています。

しかし、なぜRubyでこれができないのか理解できません:

public_mメソッド定義内の現在のオブジェクト(つまりself) は Foo のインスタンスです。では、なぜ許可されないのでしょうか。self.private_mそれを修正するには、 justに変更する必要がありprivate_mます。しかし、なぜこれが異なるのですか? selfFoo のインスタンスではありませんpublic_mか? そして、裸のprivate_m電話の受信者は誰ですか? そうではありませんself- 実際に省略したのは、Ruby がそれを行う (自分自身で private_m を呼び出す) からです。

あまり混乱していないことを願っています。私はまだRubyに慣れていません。


編集:すべての回答ありがとうございます。それらをすべてまとめると、私は(ついに)明白なselfことを理解することができました(Rubyのようなものを見たことがない人にとってはそれほど明白ではありません). したがって、プライベート メソッドを呼び出したい場合は、2 つのルールがあります:self暗黙的な受信者でなければならず、その自己は現在のクラスのインスタンスでなければなりません (Exampleその場合、これはインスタンス メソッド定義内にある場合にのみ発生します。メソッドの実行)。間違っている場合は修正してください。

Google Trail でこの質問を見つけた人へのメッセージ: これは役に立つかもしれません - http://weblog.jamisbuck.org/2007/2/23/method-visibility-in-ruby

0 投票する
2 に答える
1689 参照

c++ - 基本クラスの「デフォルト」アクセス指定子の違いの根拠

C++ ではstructとの間にほとんど違いがないことを私は知っています。classまた、いくつかの違いの理由も理解しています。このように、

  • struct のメンバーはデフォルトで public です。class のメンバーは デフォルトで private です。struct のメンバーがデフォルトで public になってC++-structいるのは、 との互換性を持たせるためC-structです。また、クラスのメンバーがデフォルトでプライベートである理由は、データのカプセル化の概念を導入するためです(つまり、オブジェクト指向の原則/テクニック/その他を適用します)。

私が理解していないのは、標準 $11.2/2 [class.access.base] を引用して、これです

基本クラスのアクセス指定子がない場合、派生クラスが struct として宣言されている場合は public が想定され、クラスが class として宣言されている場合は private が想定されます。

このねじれと反均一性の根拠は何ですか? なぜこの違いが必要なのですか?

標準からの例、

ここで、B は D2、D4、および D6 のパブリック ベース、D1、D3、および D5 のプライベート ベース、および D7 および D8 の保護ベースです。


編集

構造体とクラスのデフォルトのアクセスが異なることを考えると、この違いは理にかなっていると言う人もいるかもしれません (違いは上記の箇条書きに示されています)。しかし、どのように派生させても、inherited-struct完全に(継承をサポートしていない)と互換性がないと思います。C-struct私は間違っているかもしれませんが。そのため、おそらく例を使用して、適切な説明を求めています! :-)

0 投票する
2 に答える
4122 参照

c++ - 保護されたデータメンバーとデータ機能

クラスで保護されたデータメンバーを宣言すると、それは外界にはアクセスできないが、派生クラスにはアクセスできないことを意味します。私の質問は

派生クラスから派生したクラスにアクセスできますか?

0 投票する
5 に答える
796 参照

c++ - アクセス指定子は絶対確実ではありませんか?

こんなクラスだったら、

そうすると、外部から X にアクセスできなくなるので、これは違法です。

しかし、クラスを編集せずにアクセスできるようにすることができます! 私たちがする必要があるのはこれだけです。

ideone の作業コード: http://www.ideone.com/FaGpZ

つまり、クラス定義の直前、または , の前にそのようなマクロを定義することで、アクセス指定子を変更できます#include <headerfile.h>

C++ (マクロ/アクセス指定子/その他) の問題ではありませんか?

とにかく、このトピックのポイントは次のとおりです。

マクロを使用すると、カプセル化を簡単に破ることができます。アクセス指定子は絶対確実ではありません! 私は正しいですか?

0 投票する
3 に答える
4100 参照

c# - 私のC#プライベートクラスはDLL内のどこからでもアクセスできますが、内部の用途は何ですか?

C#にClassLibraryプロジェクトがあり、すべての「プライベートクラス」(異なる名前空間の下)は、同じアセンブリ(プロジェクト)内で相互にアクセスできます。

これで、Class1()はClass2()クラスのインスタンスにアクセスして作成できます[たとえば... new MyClass2App.Class2()]。はい、これらのクラス(Class1()およびClass2())はアセンブリの外部からアクセスできません。これらのクラスが「内部」として作成された場合と同じ動作です。クラスレベルで適用した場合の「プライベート」および「内部」アクセス指定子の実際の使用/違いを理解するのを誰かが助けてくれますか?

ありがとう!

0 投票する
1 に答える
308 参照

c++ - C++0x decltype を使用したアクセス指定子の回避

次のコードを検討してください。

コンパイラはこれを拒否します - A::B は非公開であるため、g は A::B を返すことができません。

しかし、ここで decltype を使用して g の戻り値を指定するとします。

突然、正常にコンパイルされます (g++ >= 4.4 で)。

したがって、基本的には decltype を使用して、C++98 ではできなかった方法でアクセス指定子を回避しました。

これは意図的なものですか?これは良い習慣ですか?

0 投票する
3 に答える
36104 参照

java - Javaチュートリアルでは、パッケージとプライベートのインターフェイスを使用できると書かれていますが、できません。

Javaチュートリアル「インターフェイスの定義」では、次のように述べています。

インターフェイスがであると指定しない場合、インターフェイスはpublic、インターフェイスと同じパッケージで定義されたクラスにのみアクセスできます。

しかし、これは

NewClass弱いアクセス権限を割り当てようとしているため、コンパイラエラーが生成されます。公開されました」。それで、ドキュメントが間違っている、または私が何か間違ったことをした、または私がドキュメントを誤って解釈したのですか?

インターフェイスを使用する必要はないと思います。インターフェイスが適切に整理されているので気に入っています。

0 投票する
5 に答える
1794 参照

c++ - C++ アクセス指定子

公的権利と私的権利の概念を確実に把握したいだけです。

プライベートアクセス指定子に関して、それは次のことを意味しますか:

  • クラス内のみアクセス可能
  • それらにアクセスするために使用できる public クラス メソッドがない限り、クラスのオブジェクトからアクセスすることはできません (他のオブジェクトはそれらの public 関数を使用できますか? )
  • 他のオブジェクトはそれらにアクセスできません

そして公開の場合:

  • クラスのオブジェクトからアクセス
  • 他のオブジェクトからアクセス

そうですか?