問題タブ [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.
c# - C# - virtual+override と new のキーワードの使用法
virtual
子型で一致するメソッドを宣言するときoverride
に単純に「new
c# - メソッドの非表示はC#でどのように機能しますか?
次のプログラムが印刷される理由
(そうあるべきです)
しかし、次のようにクラスBのキーワード「public」を削除すると、次のようになります。
印刷を開始します
?
c# - 継承は本当にメソッドを隠しますか?
次のコンパイラ警告が表示されます。
この(非常に単純化された)コードの場合:
私が得られないのは、なぜ GetDisplayName() 関数が警告を受けないのかということです。私は明らかに何かを見落としています。
Stack Overflow を調べてこのエラーをググったところ、インターフェイスではなく、クラスの継承に適用されるようです。なぜこれがインターフェイスに対してトリガーされるのか(メソッドを仮想として定義する)、私は本当に混乱しています。
洞察力を前もって感謝します。
c# - C# とメソッドの隠蔽
MSDN によると、"new" キーワードをメソッドの非表示に使用すると、警告のみが抑制されます。
http://msdn.microsoft.com/en-us/library/435f1dw2.aspx
メソッドの隠蔽を実行するために、この「新しい」キーワードが本当に必要ですか? 同じメソッド名を持つ子クラスがあるが、それがオーバーライドされていることを明示的に述べていない場合、それは本質的に同じことではなく、警告が表示されるだけですか? 私の理解が正しいか教えてください。ありがとう
c# - ジェネリック制約クラスでメソッド隠蔽 (新規) を使用する方法
いくつかの基本クラスに制約されているジェネリック パラメーターを持つコンテナー クラスがあります。ジェネリックに提供される型は、基本クラス制約のサブです。サブクラスは、メソッド隠蔽 (new) を使用して、メソッドの動作を基本クラスから変更します (いいえ、それは私のコードではないため、仮想にすることはできません)。私の問題は、「新しい」メソッドが呼び出されないことです。コンパイラは、提供された型をサブではなくベースクラスと見なしているようです。まるでベースにアップキャストしたかのようです。
明らかに、ここで根本的なことを誤解しています。where T: xxx
ジェネリックはアップキャスト型ではなく、制約だと思いました。
このサンプル コードは基本的に、私が話していることを示しています。
編集:
私の混乱は、これができることから来ていると思います
そして、コンパイラがのインターフェイスを持っていると見なすことを理解していても、そうなると予想T
していました。のインターフェイスがコンパイル時に設定されていたとしても、実行時に の入力が行われると想定しました。宣言は実際に行っているため、ここでは誤解を招くようですT
T
AnotherType
T
T
T foo
foo
type として実際に宣言していないことを理解すると、メソッドの非表示が機能しないT
理由が理解できます。new
そして、それについて私が言わなければならないのはそれだけです。
c# - オーバーライドとメソッドの隠蔽
C# でのメソッドのオーバーライドと非表示について少し混乱しています。それぞれの実用的な使用法と、それぞれをいつ使用するかについての説明も歓迎します。
オーバーライドについて混乱しています - なぜオーバーライドするのですか? これまでに学んだことは、オーバーリングによって、シグネチャを変更せずに、派生クラスのメソッドに必要な実装を提供できるということです。
スーパークラスのメソッドをオーバーライドせずにサブクラスのメソッドを変更すると、スーパークラスのメソッドが変更されますか?
私は次のことについても混乱しています - これは何を示していますか?
java - getDeclaredMethods()および非表示のスーパークラス静的メソッド
http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Class.html#getDeclaredMethods%28%29によると、Class.getDeclaredMethods()には、クラスによって宣言されたメソッドのみを含める必要があります。 "。ただし、以下のテストコードでかなり驚くべき結果が得られています。
私には非常に奇妙/驚くべきいくつかのこと:
コンパイラは、B.m3()がA.m3()と互換性のない戻り型を持っていることについて文句を言います。これは、JSL 8.4.8.3(ページ225 v3 langspec-3.0.pdf)によって規定されています。しかし、なぜこの制限を静的メソッドに適用する必要があるのか、興味があります。私の理解では、静的メソッドは非表示にしてオーバーライドすることはできず、参照はコンパイル時に解決されるので、この制限の背後にある理由は何ですか?
2つのm2()メソッドが出力に含まれています。これは、getDeclaredMethods()が「クラスによって宣言された」メソッドのみを返し、「継承されたメソッドを除外する」という主張と矛盾するようです。A.m2()がBによって「宣言された」とは見なされません。
1つのm1()が出力に含まれます。前のポイントに続いて、getDeclaredMethods()が2つのm2()を返すようにすることが理にかなっている場合、なぜ2つのm1()も返さないのでしょうか。それらは結局2つの異なる方法であり、一方は他方によって隠されています。m1()の場合のリターンタイプが同じであることを除いて、m1()の場合とm2()の場合の基本的な違いはわかりませんが、私が理解しているリターンタイプはメソッドシグネチャの一部ではありませんか?
前もって感謝します!
c# - C# メソッドの非表示
ファイルを適切なフォルダーに移動するためのメソッドを持つ基本クラスがあります。多くの異なる命名スキームを持つ多くの異なるファイルがあります。移動とフォルダの作成はどのファイルも同じですが、ファイル名が異なるため、日付の決定は異なります。私はこれをやろうとしています:
問題は、このコードにより、「MoveFileToProcessedFolder」メソッド内で「GetMonth」の基本クラス バージョンが呼び出されることです。「new」キーワードを使用すると、元の実装が隠され、派生実装が引き継ぐことができると思いました。これは起こっていることではありません。明らかに、この場合の new の目的を理解していません。誰かがこれを理解するのを手伝ってくれますか?
ありがとう。
c++ - C++ で関数を非表示にするコンパイラの警告をクリアする
クラスがその親から継承されているため、コンパイラで「非表示」の警告が表示されますが、名前は同じですがパラメーターが異なります。
この関数は、基本クラス関数のパラメーターと名前に一致する何もしないことを示す警告をプッシュするだけの関数を追加します (基本クラスでは当てはまりますが、警告はありません)。派生クラスに追加すると、このコンパイラ警告がクリアされます。これが派生クラスに及ぼす潜在的な影響は何ですか?
編集:基本クラス関数を使用できるようにしたくないと仮定します。(聞かないでください)。