問題タブ [member-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# メンバーによる非表示
以下の例では、何が起こるでしょうか?
コンソールに「2」が表示されると確信していますが、私が読んでいるもの(および見ているもの)はそれとは反対です...
「2」ではなく「3」と表示されるのはなぜですか? 派生クラスのメンバーは、基本クラスの同じメンバーを「隠した」と思いました...
c# - C#基本クラスからの関数の非表示、オーバーライド、および呼び出し
C# を学習していますが、次の問題が発生しました。基本クラスと派生クラスの 2 つのクラスがあります。
とりあえずキーワード抜きvirtual
で。これをコンパイルすると、クラスからoverride
非表示にしようとしているという警告が表示されます (これは当然のことです) 。MyMethod
MyBase
私がやりたいことは、派生クラスのインスタンスを持つ基本クラスからメソッドを呼び出すことです。私はこれを次のようにします:
virtual
メソッドに , etc. キーワードを指定しないと問題なく動作します。キーワードの組み合わせを入れようとしたところ、次の結果が得られました。
表が明確であることを願っています。2 つの質問があります。
- 基底クラスから関数を呼び出すのは正しい方法ですか (
((MyBase)myDerived).MyMethod();
)? キーワードについては知ってbase
いますが、派生クラスの内部からしか呼び出すことができません。そうですか? - 最後のケース (
virtual
およびoverride
修飾子を使用) で、呼び出されたメソッドが派生クラスから来たのはなぜですか? それについて説明していただけますか?
c# - メンバー非表示 (`new`) を使用して、より具体的な戻り値の型を取得する
new
サブクラスのメンバーを再定義して、より具体的な戻り値の型を利用できるようにするために使用することを検討しています。問題は、これは良い考えなのか、それともトラブルを求めているのかということです。
解決すべき問題は、いくつかの「ミラー化された」クラス階層があり、すべての階層層の型が別の階層の同じレベルを参照している場合です。説明が難しいので、以下に例を示します。
他のすべてのレベルと同様に、抽象的な「レベル」1 ( A1
/など) のみを処理するコードがあります。B1
各「レベル」がタイプをできるだけ具体的に見るといいでしょう。現在、最上位レベルで型を定義し、呼び出しコードで常にダウンキャストしています。別の名前を使用して、ある「レベル」に別のメンバーを追加することがあります。これにより、より多くの冗長なメンバーが発生します。きれいにしたい。
(ジェネリックはここではオプションではありません。B2
知らなければ役に立たないからですB3
(そこに追加のインターフェースが必要になります)。また、多くのタイプがある場合(たとえば、C1/2/3、D1/2/3 ...)一般的な引数が多すぎます。技術的には機能しますが、非常に複雑になります。)
さらに、これらのクラスの一部をシリアライズし ( DataContractSerializer
)、一部を NHibernate を使用してデータベースにマップします。
誰かがすでにこのようなことをしましたか?おすすめですか?同じ種類の問題を解決するための他のアプローチはありますか?
編集: キャストとプロパティの実装に関する議論のため、コードを少し変更しました。これは実際にはここでの質問ではありません。短い例を作成するために、できるだけ少ないコードを記述しようとしました。
c# - WPF:基本クラスの依存関係プロパティを読み取り専用にする方法
クラスがあり
public class NavigableViewport3D : Viewport3D
ます。クラスはViewport3D.Camera
プロパティを非表示にして、読み取り専用になるようにする必要があります。これが私がこれまでに持っているものです:
ただし、常に/NavigableViewport3D.CameraProperty
と同じ値を返すようにします...依存関係プロパティがない場合は、次のようにします。Viewport3D.CameraProperty
base.Camera
私はこれを達成するためのより良い方法があることを真剣に望んでいます...何か提案はありますか?
java - 日食警告の使用法「フィールド宣言は別のフィールドまたは変数を非表示にします」?
Eclipseには、警告/エラーに設定できる「フィールド宣言が別のフィールドまたは変数を非表示にする」と呼ばれるJavaコンパイラ設定があります。
あなたの意見では、この警告はどれほど重要ですか?
この問題を処理するための良い標準的な方法は何ですか?
これが発生する場所のコード例:
フィールドの名前が「fCaption」に変更されるソリューションを見てきましたが、これにより、生成可能な自動ゲッター/セッターの名前が奇数になります(getfCaption()
)。読めないが醜い...
編集:そうそう、メソッドのシグネチャTest(String caption_)
などの名前を変更する可能性がありますが、それはjavadocが奇妙に見えることになります。
c++ - C++ 代入演算子の解決
次のコードを検討してください。
次に、このメンバーを呼び出すと、次のようになります。
印刷されます:
質問: なぜ B::foo は A::foo を隠しますが、B::operator= は隠しませんか?
java - Javaでのメンバー変数の非表示/シャドウイングに関する質問
Javaで非表示がどのように機能するかを理解したいと思います。それで、あなたが次のコードを持っていると仮定しましょう
コンパイルすると、NullPointerExceptionが発生します。sc.toString()の出力になると思いました。
このコードを次のように変更します
そしてそれは期待通りに出力を取得します...oksetMember of B Aからのものをオーバーライドするので、これをこのように説明することができます。少し遊んで、BからsetMemberを削除して、NullPointerExceptionを取り戻しました。しかし、Aのコードを次のように変更すると、再度コンパイルされて出力が返されます。
実際にはSomeClassメンバーのインスタンスが2つあるように見えますが、インスタンスが2つある場合、シャドウイングとはどういう意味ですか?非表示は2番目の場合にのみ役立ちますか?
java - アクセス修飾子とJavaフィールドの非表示
これは、 「Javaアクセス修飾子とオーバーライド」という質問のフォローアップです。ただし、前者は一般的にJavaメソッドを扱います。なぜJavaフィールドの柔軟性があるのですか?継承されたクラスでは、それらを尊重して可視性を狭めたり広げたりできますが、「overridden」または「hidden」メソッドではできません。
c# - C#リストプロパティを非表示にしますか?
重複の可能性:
IsReadOnlyがインターフェイスメンバーである場合、List <T>はどのようにしてIsReadOnlyをプライベートにしますか?
さて、これは私を狂わせています。List<T>
を実装しIList<T>
ます。でも、
エラーは次のとおりです。
「System.Collections.Generic.List」には「IsReadOnly」の定義が含まれておらず、「System.Collections.Generic.List」タイプの最初の引数を受け入れる拡張メソッド「IsReadOnly」が見つかりませんでした(usingディレクティブがありませんか?またはアセンブリリファレンス?)
どうすればいいの?これは、メンバーを隠さないことについて、私たちがみんなに言うルールそのものに違反していませんか?ここでの実装の詳細は何ですか?