問題タブ [private-members]
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.
.net - MSIL-MSILからプライベートメソッドをどのように呼び出しますか?
私は「弱いイベントファクトリ」を書いています。これは、任意のデリゲートを同じ署名を持つ新しいデリゲートに変換するコードですが、ターゲットにWeakReferenceを実装しています。私はMSILを使用して、Delegate.CreateDelegateの呼び出しを回避しています(パフォーマンスが遅いことが示されています)。
弱参照デリゲートは、基になるメソッド(元のデリゲートのメソッド)がパブリックであると宣言されている限り、完全に機能します。プライベートメソッドまたは匿名メソッドが使用されるとすぐに、MSILは実行時にMethodAccessExceptionで爆撃します。
コンパイルされた式ツリーを使用して、プライベートメソッドを呼び出すことができたので、プライベートメソッドを呼び出すMSILを動的に発行できる必要があります。...では、次の何が問題になっていますか?
では、プライベートメンバーを呼び出す秘訣は何ですか?リフレクションはそれを行うことができます、式ツリーはそれを行うことができます...なぜ上記のコードは失敗するのですか?
編集:ここで答えを提供してくれたすべての人に感謝します。私のコンテキストで一貫して機能した唯一の解決策は、ジェネリックデリゲート(アクション)を使用することでした...アクションはmscorlibから発生するため、JITはプライベートメソッドを呼び出せるように完全に満足しているようです。独自のデリゲートを使用してみてください。JITは、ターゲットに直接CallまたはCallvirtを発行する場合とまったく同じように実行します。
動作するコードを確認することに興味がある人は誰でも、 codeplexにアクセスできます。ここに記載されている回答は、WeakDelegate機能の実装に役立ちました。
delphi - Delphi:子孫クラスのプライベート祖先のフィールドへの書き込み
サードパーティ コンポーネントを修正する必要があります。このコンポーネントのクラスには、その子孫によってアクティブに使用されるプライベート変数があります。
これは、両方のクラスが同じユニットに属しているため機能するため、「友達」のようなものです。
しかし、新しい単元で新しいクラスを作ろうとすると
FSomeVar にはもうアクセスできませんが、修正のために使用する必要があります。そして、基本クラスのすべてのツリーを自分のコードで再現したくありません。
可能であれば、元のコンポーネントのユニットを変更せずにそのプライベート フィールドにアクセスする簡単なハックをアドバイスできますか?
javascript - 名前空間内でプライベート変数を作成する方法は?
私の Web アプリケーションでは、次のように JavaScript で名前空間を作成しています。
また、「プライベート」(これは JS に存在しないことはわかっています) 名前空間変数を作成したいのですが、どのデザイン パターンを使用するのが最適かわかりません。
それは次のようになります。
それとも、デザインパターンは別のものでしょうか?
c# - クラスインスタンスによってプライベートメンバー変数を変更できるのはなぜですか?
otherTestClass._privateString
このコードは C# でコンパイルされ、同等のものが PHP で動作しますが、ここで変更できる理由を誰かが説明できますか?
クラスのインスタンスは、どのような状況でもプライベートメンバー変数を変更できないはずであり、アクセスしようとするとotherTestClass._privateString
「保護レベルのためにアクセスできません」というエラーが発生すると考えていました。
ただし、そうではないのに、オブジェクトを独自のクラス内でインスタンス化すると、プライベート メンバーにアクセスできるようになるのはなぜでしょうか? そして、これはカプセル化をある程度壊しませんか?それとも明らかな何かが欠けていますか?
- (上記のクラスの設計が良い方法であるかどうかを尋ねているのではなく、その背後にある理論について疑問に思っているだけです。)
編集- 回答とコメントをありがとう。明確にするために、これを実行できることが肯定的な機能と見なされるかどうか、またはコンパイル時のチェック/コードの明確さ/他のほとんどの言語がそのように行うため、それが必要なトレードオフであるかどうかも知りたいです。理想的には、コンパイラがこれを防止または警告するように思えますが、そうなると、私は言語設計者とはほど遠いものになります。このようにすることで、(カプセル化に違反することなく)何か便利なことを行うことができる方法の例は、そうでなければ困難または不可能になるでしょう。
c++ - クラスのプライベートchar*を保護するC++
クラスメソッド/プロパティ構成に関して、public、private、protectedの継承の違いを理解しています。ただし、私の質問は、特にnullで終了する文字列へのポインタに関連しています。
ここで、処理のどこかで、MyClass-> SomeValueが割り当てられ、文字列値が入力されます。問題ない。ここで、「MyClass」オブジェクトのインスタンスが作成され、これからの文字列値が必要な呼び出し元が必要です。C ++はポインタやポインタへのポインタなどで多くのダメージを与える可能性があるため、ポインタの場所を割り当てられた文字列に戻したいのですが、誰にも値を変更させたくありません。このデフォルトは、コンパイラとメモリ管理の内部で制御されていますか?誰もがこのクラスを主に内部目的で使用するリスクは低いですが、私の理解はそれだけです。
ありがとう
java - 変数「プライベート」を定義する決定をどのように行いますか?
就職の面接に参加しました。インタビュアーは、なぜプライベート変数が必要なのかと私に尋ねました。変数privateを定義して何かを達成する場合、Javaで定義されている他のアクセス修飾子を定義して同じことを達成することはできませんか?
しかし、クラスを設計している場合、変数「プライベート」を定義する決定をどのように行うことができますか?
iphone - iOS SDKチュートリアルのすべてがプロパティであるのはなぜですか?
私がAppleや他の場所からオンラインで読んだほとんどのiOSSDKチュートリアルでは、独自のクラス内からのみアクセスされる場合でも、多くのインスタンス変数がプロパティになります。
Facebookの最新のiOSSDKのEGでは、ユーザーはfacebook
アプリデリゲートで呼び出されるFacebookクラスのインスタンスを維持することをお勧めします。facebook"
プロパティです。これは、サンプルコード全体で「self.facebook」と呼ばれます。ただし、「facebook」プロパティは、アプリデリゲートの外部からは参照されません。
どうしてこれなの?私は何が欠けていますか?インスタンス変数がそれ自体のクラス内でのみ使用される場合、それをプロパティにして公開されないfacebook
ようにし、クラス内ではなく、self.facebook
または クラス内から参照することをお勧めしself->facebook
ます。
率直に言って、Facebookプロパティが必要な場合でも、アプリデリゲート内では「self.facebook」ではなく単に「facebook」と呼びたいと思います。
では、何が得られるのでしょうか?なぜ私はどこにでもプロパティを見ているのですか?
c++ - プライベートメンバーと無料機能のDoxygenコメント?
プライベート メンバーと無料関数に Doxygen コメントを使用する必要がありますか? 私は Java の世界から来ましたが、プライベート メンバーに Javadoc を追加したことはありません。これは C++ の世界で受け入れられる慣行ですか?
oop - プライベートメンバーの存在に関する知識を公開せずに、プライベートメンバーとのVBAクラスの同等性テストを作成する方法はありますか?
私はかなりの量のExcelVBAプログラミングを行っていますが、オブジェクト指向のプログラミングはそれほど多くありません。これが時々出てくるもので、私を悩ませています。私が見逃しているものがあるのではないかと思います。
VBAで、次のようないくつかのプライベートメンバーで定義されたクラスCがあるとします。
VBAがC++または(ほとんど?)OOPをサポートする他の言語のように機能する場合、次のようにクラスCのインスタンス間で同等性テストを実行するメンバー関数を作成できます。
もちろん、クラスメンバー関数は、呼び出されたのと同じインスタンスのプライベートクラスメンバーにしかアクセスできないため、VBAではコンパイルされません。この種のことを行うために私がこれまでに思いついた最善の方法は、代わりに次のような2つのメンバー関数を定義することです。
それは面倒で、プライベートクラスのメンバーの存在に関する知識を公開しますが、少なくともプライベートクラスのメンバーの値を実際に公開することは避けます。
これは私ができる最善のことですか?
編集:
いつものように、答えの後で、私は質問を表現するためのより良い方法に気づきました。「プライベートメンバーとのVBAクラスの同等性テストを作成するためのよりクリーンな方法はありますか?」というタイトルが付けられました。ディックがそれに答えたとき。