問題タブ [class-visibility]
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.
c# - より多くのライブラリ プロジェクトによる .NET クラスの可視性
ライブラリプロジェクトAにパブリッククラスMyClass
があり、このプロジェクトはクラスを使用しているプロジェクトBによる参照です。
プロジェクト B もライブラリであり、プロジェクト C によって参照されているとしましょう。
MyClass
プロジェクトBを参照するだけでプロジェクトCで使用することはできますか?
.net - 外部フレームワークを使用するときにクラスを開きすぎないようにするにはどうすればよいですか?
依存性注入を使用して、両方のフレームワークのコントローラーからサービス クラスやその他の依存性にアクセスする MVC および WebAPI プロジェクトが多数あります。私が抱えている問題は、すべてのサービスを各プロジェクトinternal
に固有のものにしたかったことですが、両方のフレームワークのコントローラー クラスをパブリックにする必要があるため、できません。パラメーターのインスタンスを受信しようとすると、コンパイル エラーが発生します。コンストラクター注入を使用した内部型です。
これは私を何度も噛んだ。これは、コードを呼び出すほとんどすべてのフレームワークで発生します。これは、WebAPI、MVC、さらには WebForms などの Web フレームワークや、テスト クラスも公開する必要があるテストなどの他の種類のプロジェクトで発生します。
一般的なオブジェクト指向についての私の理解では、可能な限りスコープを閉じて、操作する必要のある最小限の機能セットのみにアクセスできるようにする必要があるということです。これは、各クラスに対する他の要素の影響を最小限に抑え、より明確で発見しやすいコードにつながるため、一般的に非常に優れたアプローチだと思います。
私のサービスクラスはまさにそれです。それらは、同じアセンブリ内のコントローラーだけが使用するために作成され、他の誰も使用しません。それらをマークする必要があるpublic
ため、理由もなくそれらを外部の呼び出し元に公開しています。たとえば、FxCop から特定のメソッドを呼び出している人がいない場合、FxCop は警告します。内部クラスですが、プロジェクト (またはソリューション) の外部の誰かがその型を使用してそのメソッドを呼び出している可能性があるため、クラスが public とマークされている場合、それを推測することはできません。
これは明らかにインターフェースにも拡張されます。前述のとおり、依存性注入 (Unity を使用) を使用しており、通常、そのシナリオではサービス クラスごとにインターフェイスがあります。実装自体を内部としてマークできたとしても、インターフェイスを公開する必要があることはまだ理想的ではありません。
内部クラスとインターフェイスをきれいに定義できるようにするパターンはありますが、外部に面したクラスをパブリックにする必要がある外部フレームワークと連携して、彼らが私を呼び出すことができるようにするパターンはありますか? コードのスコープをできるだけ厳密にするには、一般的にどのように進めればよいですか?
knockout.js - 構成モデルが表示されている場合にのみ構成モデルをアクティブにする方法は?
構成されたモデルを含むビューがあります。ページをアップロードすると、構成されたコンポーネントはまだ表示されていませんが、アクティブ化されています。私が望むのは、「回答」ボタンをクリックすることです。そのときだけ、構成されたコンポーネントがアクティブになります(「composedView」のアクティブ化ライフサイクルを開始することを意味します
これは私の見解です:
ありがとうございました!
php - PHP プロパティの可視性: 特定のファイルへのアクセスを許可する
これが少し奇妙であることはわかっていますが、コンセプトをいじっていて、それを実行するための最良の方法がわかりません。
PHP では、メソッドとプロパティをパブリックまたはプライベートにすることができます。私たちのプロジェクト内で、PHP コントローラーがアクセスに関してフロントエンド アプリと同じように動作するように強制したいと考えています。これは、ビジネス ロジックがなく、アクセスが制限されていることを意味します。もちろん、これを手動で強制することもできますが、オブジェクトのプライバシーを使用して強制できるというアイデアが気に入っています。もちろん、メソッドをプライベートまたは保護することもできますが (そうである可能性があります)、他のクラスはこれらのメソッド/プロパティと対話できません。
私がほとんど望んでいるのは、指定されたファイル/フォルダーなどのみが含まれる別のタイプのプライバシーです。メソッド/プロパティと対話できます
コンセプトでは、私が本質的に見たいのは次のようなものです:
- プライベート
- 保護された
- 制限付き- やり取りできる特定のフォルダー/ファイルのみ
- 公衆
(実際、私の正確な状況では、私はLaravelを使用しているので、モデル内でこれを使用します。これは基本的に、アクセスが許可されているコマンドと他のモデルになります)
これが難しいことはわかっており、これまでに使用されたことはありませんが、機能させるための創造的な解決策があると思います。実際には新しいアクセス タイプを定義できないことはわかっていますが、いくつかのトリックを使用して、モデルに同様のものを持たせることができるでしょうか?
誰かが似たようなことを聞いたことがありますか?他のプログラミング言語にこのようなものはありますか?
java - Java でのパッケージ階層の設計、可視性の制約
ts
チケットシステム用のインターフェースを含むパッケージがあります。hts
の具体的な実装を含むパッケージもありますts
。私は を持ってTicketSystem.class
おりts
、そこから最初のものHTicketSystem.class
をhts
拡張しました。パッケージHTicketSystem.class
内の唯一のパブリック クラスです。hts
の他のすべてのクラスにhts
は、デフォルトの可視性があります。hts
パッケージには多数のファイルがあり、その中には Java Bean があります。これらの Bean をサブパッケージに抽出したいと思いますhts.beans
。明らかな問題は可視性ですJLS
。
7.1 パッケージメンバー
...
パッケージの階層的な命名構造は、従来の方法で関連するパッケージを整理するのに便利であることを目的としていますが、最上位の型と同じ単純な名前を持つサブパッケージを持つパッケージを禁止すること以外には、それ自体には何の意味もありません (§7.6)。そのパッケージで宣言されています。oliver という名前のパッケージと oliver.twist という名前の別のパッケージの間、または evelyn.wood と evelyn.waugh という名前のパッケージの間に特別なアクセス関係はありません。
1)beanA.class
デフォルトの可視性のままにすると、hts
クラスからは見えなくなります。
2)beanA.class
公開に変更すると、外から見えるようになります。
提案/ベストプラクティスは大歓迎です。
java - 修飾子の不正な組み合わせ: public と private
次のコードに問題があります...
他にもありますが、プライマリコンストラクターでエラーが発生しています。タイトルに入力したエラーが表示されます。ご覧のとおり、私のクラスとコンストラクターはどちらもパブリックです。これにより問題が発生することはありませんが、問題が発生しているようです。
php - 別のクラスのプライベート変数にアクセスする最も効率的な方法は?
別のクラスのプライベート変数にアクセスできるようにする方法はたくさんありますが、最も効率的な方法は何ですか?
例えば:
私はいくつかの詳細を含むこのクラスを持っています:
別のクラスでは、例としてそれらにアクセスする必要があります(ただし、変数がこのクラスのスコープ内にないため、これは明らかに機能しません):
このような関数は、クラス「何か」内でアクセス クラスによって使用されるのに十分でしょうか?:
php - PHPでの可視性? 継承時の $this のコンテキストは?
私はphpが初めてで、可視性についてのドキュメントを調べていました。ドキュメントのこの例と少し混乱しています。への呼び出しが行われたときに、sへの$myFoo->test()
呼び出しを行うべきではありません。オブジェクトではなくオブジェクトであってはならないということですか?. 私の知る限り(ここでは間違っているかもしれません) 、継承された独自のメソッドがあり、呼び出すと '$this->testPrivate'がs objectである必要があります。のメソッドを呼び出すのはどうですか?Foo
$this->testPrivate();
$this
Foo
Bar
Foo
test()
Bar
$myFoo->test()
$this
Foo
myFoo
Bar
testPrivate