タグ付けされた質問 「private」

プライベートは、オブジェクト指向プログラミングでカプセル化する方法です。

22
C ++の静的コンストラクタ?プライベート静的オブジェクトを初期化する必要があります
プライベート静的データメンバー(すべての文字a〜zを含むベクトル)を持つクラスが必要です。JavaまたはC#では、クラスのインスタンスを作成する前に実行される「静的コンストラクタ」を作成し、クラスの静的データメンバーを設定するだけです。(変数は読み取り専用で、1度だけ設定する必要があるため)1回だけ実行され、クラスの関数であるため、プライベートメンバーにアクセスできます。ベクトルが初期化されているかどうかを確認し、初期化されていない場合は初期化するコードをコンストラクターに追加できますが、これにより多くの必要なチェックが導入され、問題の最適な解決策とは思えません。 変数は読み取り専用であるため、それらはpublic static constである可能性があるため、クラスの外で一度設定できると思いますが、もう一度、それは一種の醜いハックのように思えます。 インスタンスコンストラクターで初期化したくない場合、クラスにプライベート静的データメンバーを含めることはできますか?

19
Javaでのプライベート静的変数の使用は何ですか?
変数がとして宣言されている場合、public static varName;どこからでもとしてアクセスできますClassName.varName。また、静的メンバーはクラスのすべてのインスタンスによって共有され、各インスタンスに再割り当てされないことも認識しています。 変数の宣言は、変数の宣言とはprivate static varName;異なりますprivate varName;か? どちらの場合も、他のクラスから、ClassName.varNameまたはClassInstance.varName他のクラスからアクセスすることはできません。 変数を静的として宣言すると、他の特別なプロパティが得られますか?

7
プライベートメソッドを呼び出す方法はありますか?
XMLとリフレクションを使用Objectして別のクラスにを返すクラスがあります。 通常、これらのオブジェクトは外部オブジェクトのサブフィールドですが、時々それをオンザフライで生成したいものです。私はこのようなものを試しましたが、役に立ちませんでした。Javaではprivateリフレクション用のメソッドにアクセスできないためだと思います。 Element node = outerNode.item(0); String methodName = node.getAttribute("method"); String objectName = node.getAttribute("object"); if ("SomeObject".equals(objectName)) object = someObject; else object = this; method = object.getClass().getMethod(methodName, (Class[]) null); 提供されたメソッドがの場合private、で失敗しますNoSuchMethodException。メソッドを作成するpublicか、派生元の別のクラスを作成することで解決できます。 要するに、privateリフレクションを介してメソッドにアクセスする方法があるのか​​と思っていました。
146 java  reflection  private 


3
C ++でのフレンド宣言-パブリックとプライベートの違い
フレンド関数/クラスをプライベートまたはパブリックとして宣言することには違いがありますか?これについてオンラインで何も見つけることができないようです。 私は以下の違いを意味します: class A { public: friend class B; }; そして class A { private: //or nothing as the default is private friend class B; }; 違いはありますか?
142 c++  private  friend  public 

16
Rubyで保護されたプライベートメソッドを単体テストする最良の方法は何ですか?
標準のRuby Test::Unitフレームワークを使用して、Rubyで保護されたメソッドとプライベートメソッドを単体テストする最良の方法は何ですか? 「パブリックメソッドのみをユニットテストする必要があります。ユニットテストが必要な場合は、保護されたメソッドやプライベートメソッドであってはなりません」と誰かがパイプを張って独断的に主張することは間違いありませんが、私はそれについて議論することにあまり興味がありません。私はいくつかの方法持っているこれらのプライベート/保護された方法は、適度に複雑で、良いと正当な理由のために保護またはプライベートを、そしてクラスのパブリック・メソッドが正常に機能してこれらの保護/プライベートメソッドに依存し、したがって、私はテストの方法が必要ですprotected / privateメソッド。 もう1つ...通常は、特定のクラスのすべてのメソッドを1つのファイルに入れ、そのクラスの単体テストを別のファイルに入れます。理想的には、この「保護されたメソッドとプライベートメソッドの単体テスト」機能をメインソースファイルではなく単体テストファイルに実装して、メインソースファイルをできるだけシンプルかつ単純にするための魔法がすべて欲しいです。

9
mochaとnode.jsによるプライベート関数の単体テスト
node.js用に作成されたアプリケーションを単体テストするためにモカを使用しています モジュールにエクスポートされていない関数を単体テストすることは可能ですか? 例: 私はこのように定義された多くの関数を持っています foobar.js function private_foobar1(){ ... } function private_foobar2(){ ... } パブリックとしてエクスポートされたいくつかの関数: exports.public_foobar3 = function(){ ... } テストケースは次のように構成されています。 describe("private_foobar1", function() { it("should do stuff", function(done) { var stuff = foobar.private_foobar1(filter); should(stuff).be.ok; should(stuff)..... private_foobar1はエクスポートされないため、明らかにこれは機能しません。 プライベートメソッドを単体テストする正しい方法は何ですか?モカにはそれを行うためのいくつかの組み込みメソッドがありますか?

5
リフレクションを介してプライベートプロパティを設定することは可能ですか?
リフレクションを介してプライベートプロパティを設定できますか? public abstract class Entity { private int _id; private DateTime? _createdOn; public virtual T Id { get { return _id; } private set { ChangePropertyAndNotify(ref _id, value, x => Id); } } public virtual DateTime? CreatedOn { get { return _createdOn; } private set { ChangePropertyAndNotify(ref _createdOn, value, x …

9
C#で「プライベート」キーワードを記述する理由は何ですか?
私の知る限りでは、privateデフォルトでどこでも C#では(私は書いていない場合つまりpublic、protected、internal、など、それはなりますprivateデフォルトでは)。(間違いがあったら訂正してください。) それで、そのキーワードを書く理由は何ですか、またはなぜそれがメンバーのために存在するのですか? たとえば、イベントハンドラーが自動生成されると、次のようになります。 private void RatTrap_MouseEnter(object sender, CheeseEventArgs e) { } しかし、それが暗黙的でデフォルトであるのに、なぜそれはプライベートでさえ書くのですか?初心者の開発者(C#のデフォルトであることを知らない人)がプライベートであることを知っているだけですか?それともコンパイラに違いはありますか? また、「プライベート」(単独)でメンバーのアクセシビリティが変わるケースはありますか?

2
なぜ `private val`と` private final val`が違うのですか?
私はそれを考えるために使用されるprivate valとprivate final val、私はScalaのリファレンスセクション4.1を見るまで、同じです。 定数値の定義は次の形式です。 final val x = e ここで、eは定数式です(§6.24)。最後の修飾子が存在する必要があり、型注釈を与えることはできません。定数値xへの参照自体は、定数式として扱われます。生成されたコードでは、定義の右側に置き換えられます。 そして私はテストを書きました: class PrivateVal { private val privateVal = 0 def testPrivateVal = privateVal private final val privateFinalVal = 1 def testPrivateFinalVal = privateFinalVal } javap -c 出力: Compiled from "PrivateVal.scala" public class PrivateVal { public int testPrivateVal(); Code: 0: …
100 scala  private  final 

10
Python読み取り専用プロパティ
属性をプライベートにする必要があるのか​​、プロパティを使用する必要があるのか​​わかりません。 私は最近、セッターとゲッターがpythonicではなく、プロパティデコレーターを使用する必要があることを読みました。大丈夫です。 しかし、もし私が属性を持っている場合、それはクラスの外部から設定されてはいけませんが、読み取ることができます(読み取り専用属性)。この属性はプライベートである必要がありself._xますか?はいの場合、ゲッターを使用せずにそれをどのように読むことができますか?私が今知っている唯一の方法は書くことです @property def x(self): return self._x そうすれば属性を読み取ることができますobj.xが、設定できないobj.x = 1ので問題ありません。 しかし、設定してはならないオブジェクトを設定することについて本当に気にする必要がありますか?多分私はそれをそのままにしておくべきです。しかし、obj._xユーザーにとって読みが奇妙なため、アンダースコアを使用することはできません。使用する必要がありますがobj.x、ユーザーは、この属性を設定してはならないことを知りません。 あなたの意見と実践は何ですか?

7
プライベートメソッドは本当に安全ですか?
Javaでは、privateアクセス修飾子はクラスの外からは見えないため、安全であると見なされます。それから、外の世界もその方法について知りません。 しかし、Javaリフレクションはこのルールを破るために使用できると思いました。次のケースを検討してください。 public class ProtectedPrivacy{ private String getInfo(){ return "confidential"; } } 次に、別のクラスから情報を取得します。 public class BreakPrivacy{ public static void main(String[] args) throws Exception { ProtectedPrivacy protectedPrivacy = new ProtectedPrivacy(); Method method = protectedPrivacy.getClass().getDeclaredMethod("getInfo", null); method.setAccessible(true); Object result = method.invoke(protectedPrivacy); System.out.println(result.toString()); } } 上記のようなことをするためにはメソッド名を知らなければならないので、現時点では私はまだプライベートメソッドが安全だと思っていました。しかし、他の誰かが作成したプライベートメソッドを含むクラスの場合、それらの可視性はありません。 しかし、コード行の下なので、私のポイントは無効になります。 Method method[] = new ProtectedPrivacy().getClass().getDeclaredMethods(); これにmethod[]は、上記のことを行うために必要なすべてのものが含まれています。私の質問は、Javaリフレクションを使用してこのようなことを回避する方法はありますか? …

5
コピーコンストラクターでプライベート変数にアクセスできるのはなぜですか?
クラス内のget関数を使用するだけで、プライベート変数にアクセスできないことを学びました。しかし、なぜコピーコンストラクターでアクセスできるのでしょうか。 例: Field::Field(const Field& f) { pFirst = new T[f.capacity()]; pLast = pFirst + (f.pLast - f.pFirst); pEnd = pFirst + (f.pEnd - f.pFirst); std::copy(f.pFirst, f.pLast, pFirst); } 私の宣言: private: T *pFirst,*pLast,*pEnd;

6
Swiftで@objcを使用するのはいつですか?
Swiftでは、次のような方法がいくつかあります。 @objc private func doubleTapGestureRecognized(recognizer: UITapGestureRecognizer) @objcをいつ使用するのか疑問に思いましたか?いくつかのドキュメントを読みましたが、Objective-Cで呼び出し可能にする場合は、@ objcフラグを追加する必要があると言われています。 ただし、これはSwiftのプライベート関数です。@ objは何をしますか?

5
Railsの保護されたプライベートメソッド
Rubyでのメソッドの可視性(パブリックメソッド、プロテクトメソッド、プライベートメソッド)は、このブログ投稿のような場所で詳しく説明されています。しかし、Ruby on Railsでは、フレームワークの設定方法が原因で、通常のRubyアプリケーションとは少し異なるように見えます。それで、Railsモデル、コントローラー、ヘルパー、テストなどでは、保護されたメソッドまたはプライベートメソッドを使用することが適切である/適切でないのはいつですか? 編集:これまでの回答をありがとう。Rubyでの保護とプライベートの概念は理解していますが、Railsアプリのさまざまな部分(モデル、コントローラー、ヘルパー、テスト)のコンテキスト内でこれらのタイプの可視性が使用される一般的な方法の説明をもっと探しています。 。たとえば、パブリックコントローラメソッドはアクションメソッドであり、アプリケーションコントローラの保護されたメソッドは、複数のコントローラからアクセスする必要がある「ヘルパーメソッド」などに使用されます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.