問題タブ [method-hiding]

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 に答える
598 参照

c++ - 「using」宣言を使用して基本クラス メソッドを非表示にすると、代入演算子が機能しない

以下は、派生クラスで基本メソッドを使用する方法の簡単な例です。

の本文に以下のステートメントを追加して、Derived両方のメソッドを非表示にすると、...

...その後、Base::foo()正常に非表示になります(アクセスできなくなります)。
それでもBase::operator =アクセス可能です!!

他の事業者でも同様の現象が起きています。これはg++ のデモです

アクセシビリティ規則 (usingキーワードによって適用される) は、メソッドと演算子に同じように適用されるべきではありませんか?
そうでない場合、ステートメントの意味は何ですか: using operator =;、コンパイラによって単に無視されますか?

更新

  1. 私の最初の考えは、コンパイラが独自のデフォルトを生成している可能性があるということでしたDerived::operator =。を使っているので間違い Base::operator =です。
  2. private継承を使用すると、Base::foo()自動的に非表示になります (なくてもusing)。しかし、影響はありませんBase::operator =。まだ機能しています。

「非表示にする方法」の解決策は望まないことに注意してください。しかし、言語の観点から、演算子が他のメソッドのように非表示にならない理由を理解したいと思います。

0 投票する
0 に答える
89 参照

c# - メソッドを非表示にするときに new キーワードが必要ないのはなぜですか?

私はこの答えを読みました:

新しいキーワードが持つ唯一の効果は、警告を取り除くことです。new キーワードを使用していないときに警告を受け取る目的は、本当にメソッドをオーバーライドするつもりだったときに誤ってメソッドをシャドウするのを防ぐことです。

しかし、単純にエラーにしないのはなぜですか? 偶発的な非表示を防ぐことを目的としている場合は、すべてが完全に明確になるように、すべてを行って、単なる警告ではなく要件にしてみませんか?

完全に明確にするために、私はキーワードが何をするかを知っています。コンパイラチームの思考プロセスは、「物事を明確にするのは良いことなので、キーワードを追加しましょう。しかし、物事を明確にすることはそれほど重要ではないので、オプションにしましょう」というものだったようです...

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

c++ - 仮想関数のオーバーライドと非仮想関数の非表示の違いは何ですか?

次のコード フラグメントを考えると、関数呼び出しの違いは何ですか? 関数隠蔽とは?関数のオーバーライドとは それらは関数のオーバーロードとどのように関係していますか? 2つの違いは何ですか?これらについての適切な説明を 1 か所で見つけることができなかったので、情報を統合できるようにここで質問しています。

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

c# - 暗黙的および明示的なメソッドの隠蔽

次の 2 つの使用例があります。

これにより、キーワードSumを使用してメソッドが明示的に非表示になりました。new

両者の違いがわかりませんでした。2 番目のコードは Sum メソッドを暗黙的に隠していますか?

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

java - インスタンスとメソッドの非表示: ポイントは?

インスタンスとメソッドの非表示の理由と利点、特にスーパークラスメンバーを複製することで得られる利点を誰かが説明できますか? それは、クラスをさらに定義し、それを改善することを目的とする継承に直面していませんか?

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

c# - 内部仮想メソッドを非表示にする

私はそのようなものを持っています。

コンパイルされたアセンブリで。このクラスから派生したクラスがあります。明らかに、その特定のアセンブリの外にいるため、このメソッドをオーバーライドしたり、呼び出したりすることはできません。

自分のアセンブリからは「見えない」ので、このメソッドを非表示にすることはできますか?

この動作を変更して、このメソッドが呼び出されないようにしたり、ルートを変更したりする方法はありませんか?

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

java - これはメソッドの隠蔽の場合ですか?

基本クラス Employee に子クラス (Pro) object から呼び出すことができる静的メソッド meth1() がある次のコードがあります。メソッドの隠蔽の場合ですか、それとも何ですか? 、Pro クラスに meth1() メソッドを実装していないためわかりませんが、Pro オブジェクトから Emplyee 静的メソッドを呼び出すことはできます。

出力:

ありがとう

ジェイエンドラ