問題タブ [covariance]

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 投票する
6 に答える
15438 参照

c++ - C ++共分散が最適なソリューションはいつですか?

この質問は数時間前にここで尋ねられ、私が自分のコードで共変の戻り型を実際に使用したことは一度もないことに気づきました。共分散が何であるかわからない場合は、タイプが同じ継承階層の一部である場合、(通常は)仮想関数の戻りタイプを異ならせることができます。例えば:

2つのf()関数の異なる戻り型は、共変であると言われます。古いバージョンのC++では、戻り値の型が同じである必要があるため、Bは次のようになります。

だから、私の質問:共変の戻り型の仮想関数が必要な実際の例を持っている人はいますか、または単にベースポインタまたは参照を返すための優れたソリューションを作成しますか?

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

c# - 抽象メソッドからの共変リターン型に関する問題

抽象メソッドとリターンタイプの共分散について2日間のビートダウンを締めくくろうとしています。すでに、2つの同様の質問を投稿しており、提供された情報についてコミュニティに永遠に感謝しています。フィニッシュライン。これが私がやろうとしていることです。2つの抽象クラス、RecruiterBaseとCandidateBaseは、どちらもRecruiterAとCandidateAの実装を作成しています。RecruiterBaseには、採用されたすべての候補者がIQueryableを返すようにするための抽象的なメソッドがあります。RecruiterAの実装は、GetCandidates()メソッドをオーバーライドしてIQueryableを返します。

および実装:

RecruitreBaseの実装では、GetCandidates()メソッドが>IQueryable<CandidateA>の代わりに返されるため、コンパイル時エラーをスローするコンパイルを試みますIQueryable<CandidateBase

前の質問(抽象/仮想メソッドからの一般的な戻り型)からの提案を機能させることができなかった後、私はもっとたくさん読んで、SOで次の質問に出くわしました

C#のサブクラスのオーバーライドされたメソッドでサブタイプを返す方法は?

最終的に、私が探していたのは、リターンタイプに共分散を実装する方法であることに気づきました。MarcGravellのスニペットを使用しました...

...私の解決策の基礎として。これで、RecruiterBaseクラスとRecruiterAクラスは次のようになります。

と私の実装...

最終的に探していたものが得られることを期待していましたが、GetCandidates()がCandidateAをCandidateBaseに暗黙的に変換できないため、次のコードでコンパイル時エラーが発生しました。

だから私はキャストを追加しました:

その後、すべてがコンパイルされますが、実際にコントローラーでGetCandidates()を呼び出すと、IQueryable<CandidateBase>の代わりに戻りますIQueryable<CandidateA>。だから私は始めたところに戻ってきました。

あなたがこれを最後までやり遂げて、あなたが私を助けることができるならば、私はあなたにあなたの好きなビールの12パックを送ります!

0 投票する
4 に答える
904 参照

c# - 「何でも」のジェネリック コレクションを返すメソッドを宣言する方法 (C#)

抽象基本クラスから派生するジェネリック コレクション クラスの階層を使用して、抽象基本クラスからも派生するエンティティ項目を格納しています。

このモデルの目的は、CollectionBase<T> から派生したクラスのメンバーに厳密な型規則を適用し、これらのメンバーが既定のパブリック コンストラクターを持つことを保証することです。これまでのところ、動作します。

ここで、CollectionBase<T> から派生したクラスのインスタンスを返すファクトリ メソッドを作成したいと考えています。通常のアプローチは次のようになることを理解しています。

... または多分 ...

ただし、問題は、呼び出し元のルーチンが必要な "T" を認識していないことです。返す特定のタイプのコレクションを決定する必要があるのは、ファクトリ メソッド自体です。したがって、「戻り値の型は CollectionBase<T> から派生する」という非ジェネリック メソッド シグネチャが必要です。私はこのようなことを想定しています(合法であれば)...

これは厄介なジェネリック分散の問題の 1 つだと思いますが、この件に関する Eric Lippert の広範な説明を読んだ後でさえ、私がやろうとしていることが C# 4.0 で実行可能であるかどうか、および単純な方法があるかどうかはまだわかりません。 C# 3.0 での回避策。

あなたのアイデアを前もってありがとう。

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

c# - IQueryableに変換可能IQueryable に?

私は共分散について知っており、一般的に、v4.0 までは C# では不可能であることを知っています。

しかし、私は特定のケースについて疑問に思っています。実際にはクエリを実行しないが、実際には呼び出しを「パススルー」できるラッパークラスを何らかの方法で作成することで、に変換する方法はありIQueryable<Derived>ますか?IQueryable<Base>.Where<>()

私の使用例は、多くの同様のテーブルを持つデータベース スキーマを処理しようとしているということです。ほとんどのフィールドは共通しており、共通フィールドの多くは各テーブルでクエリを実行する必要があります。私はLinqToSqlを使用しています。各テーブルのすべてのクエリが重複しないようにしたいと考えていました。

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

c# - 子クラスの抽象クラスのメンバーの型をオーバーライドする方法

私は次のコードを持っています:

これはコンパイル エラーを生成します。子クラスで同じ名前の異なる型を持つという目標を達成するために、TestProperty でジェネリック型を使用する必要があるのでしょうか?

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

math - コレログラムを使用して分散を推定する方法は?

コンピューター シミュレーションの本から、この 2 つの方程式を得ました。

代替テキスト

1 つ目は、 correlogramを計算することです。2 つ目は、correlogram を使用して分散を推定する方法です。

観測値はしばしば関連しているため、観測値の分散を推定する一般的な方法は、コンピューター シミュレーションでは正しくないことがよくあります。

私の質問は、プログラムから計算した値が非常に大きいため、正しくない可能性があるということです。

k が大きくなると r[k] が 0 に近づくため、2 番目の式はかなり大きな値になると思いますが、式が間違っているのではないでしょうか?

あなたが尋ねたように、これがプログラム全体です(Pythonで書かれています):

0 投票する
4 に答える
210 参照

c# - 割り当てるフィールドの名前がわかっている場合、配列を未知の型の配列に割り当てることはできますか?

フィールドに配列を割り当てる必要があります。フィールドのタイプはわかりませんが、インスタンスとフィールドの名前への参照があります。配列をフィールド型にキャストできると想定できます。これはできますか?

バス

編集:

このコードが私が何をしようとしているのかを明確にすることを願っています。これにより、代入で例外が発生します。

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

c# - C#4.0での共変性と反変性を理解する

チャンネル9でそれについてのビデオを見ましたが、あまり理解していませんでした。

誰かが私にこれらについて理解しやすい簡単な例を教えてもらえますか?その後、実際にどのように使用されるのでしょうか?

0 投票する
4 に答える
960 参照

java - Javaが一般的なコレクションの共分散を追加する計画はありますか?

私は次のようなコードを書き込もうとしていました:

(ConcreteObjectがIObjectを実装する場合)

これはまったく機能しません。コンパイラエラーが発生します。Javaは将来これをサポートする予定がありますか?それまでの最善の回避策は何ですか?私がやったことは:

これは機能し、この方法で行うことによる悪い副作用は実際にはないかもしれません。これは一般的に受け入れられている最善のアプローチですか?

0 投票する
6 に答える
2254 参照

java - リストです> コレクションのインスタンス>?

コレクションのコレクションを単一のセットに変換するための、この便利な汎用関数を作成しました。

それから私はそれを呼び出そうとしました:

次のエラーを受け取りました。

今、 aList Collectionであり、 aString Tです。では、なぜこれが機能しないのですか?どうすれば修正できますか?