問題タブ [contravariance]
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.
scala - Scalaタプルの一般的な「マップ」関数?
タイプRを返す単一の関数を使用してScalaタプル(またはトリプル、...)の要素をマップしたいと思います。結果は、タイプRの要素を持つタプル(またはトリプル、...)になります。
OK、タプルの要素が同じタイプのものである場合、マッピングは問題ではありません。
しかし、このソリューションを一般的にすること、つまり、同じ方法で異なるタイプの要素を含むタプルをマップすることも可能ですか?
例:
戻る必要があります
しかし、マッピング関数がSub1とSub2のスーパータイプを決定するように解決策を見つけることができませんでした。タイプ境界を使用しようとしましたが、私のアイデアは失敗しました。
ここでX >: B
オーバーライドするようX >: A
です。Scalaは複数のタイプに関するタイプ境界をサポートしていませんか?はいの場合、なぜですか?
c# - 値型で共変性と反変性が機能しないのはなぜですか?
このスニペットはLINQPadでコンパイルされていません。
コンパイラのエラーメッセージは次のとおりです。
'UserQuery.IsNull(object)'のオーバーロードはデリゲート'System.Func'と一致しません
文字列配列では機能しますが、では機能しませんint[]
。どうやらボクシングと関係があるようですが、詳しく知りたいです。
inheritance - 私は本当にこの共/反変性のことを理解していません...ジェネリックな get メソッドと set メソッドの両方を持つことはできませんか?
私はいくつかの例で私の問題を説明すると思います..
だから私は共分散が必要です..
いいですね、うまくいきます。それから私はそれを使いたい:
すべて問題ありませんが、リポジトリにもオブジェクトを挿入する必要があります。out パラメータでは、これを行うことはできません。
だから私は2つのパラメータを追加しようとします:
そして、最初の例と同じエラーが発生します。使用時に同じエラーが発生しますin TInsert
では、一体どうすれば挿入とフェッチの両方をサポートできるのでしょうか?
編集:だから私は可能な解決策を見つけましたが、それは最適とはほど遠いです
EDIT2 : エリックに応えて: これは、私が達成しようとしていることのより完全な例です。IRepo インスタンスをグループ化できるように共分散が本当に必要ですが、モデルをインスタンスとして使用して追加/更新メソッドを持たせたいと思っています。アイテムを追加するためのコンパイル時のタイプ セーフを取得できないことは理解していますが、このユース ケースでは要素を読み取るだけで済みます。
c# - .NET 4.0 でこれを行うよりエレガントな方法はありますか?
C# 4.0 は、オーバーライドのパラメーターで共分散 (「in」キーワードを使用) をサポートしていないようです。そうですか?
もしそうなら、これを行うためのよりエレガントな方法はありますか?
環境
を処理する一連のクラスがありMoreDerivedEvent
ます。イベント処理コードの制限により、 のイベント ハンドラーを 1 つしか登録できず、MoreDerivedEvent
インターフェイスの登録をイベントとして処理するかどうかもわかりません (ガイダンスではクラスを明示的に使用するため、処理されるとは思いません)。 )。したがって、イベントを適切に処理するために、次のようにハンドラーを定義しました。
これは明らかに真の継承を提供しません。この問題を解決できない場合はDerivedType
、派生した型をフラット化するだけです。BaseType
しかし、最初に Stack Overflow コミュニティに投稿することにしました。
c# - 反変パラメータ?
これはおそらくばかげた質問ですが、ページの構文をもう少し読みやすくするために使用する方法があります
それから私は書くことができます
ただし、アクションを Do メソッドに移動して、さらに簡単に記述できるようにしたいと思います。
しかし、Do メソッドを実行するために反変パラメーターを記述する方法は少しわかりますか?
c# - 同じ型引数の共変性と反変性
C#仕様では、引数の型を同時に共変と反変の両方にすることはできないと規定されています。
これは、共変または反変のインターフェースを作成するときに、タイプパラメーターをそれぞれ「out」または「in」で装飾するときに明らかです。両方を同時に許可するオプションはありません(「outin」)。
この制限は単に言語固有の制約ですか、それとも圏論に基づいて、タイプを共変と反変の両方にしたくないという、より深く、より根本的な理由がありますか?
編集:
私の理解では、配列は実際には共変と反変の両方でした。
c# - C# での共分散の問題
私は次のように宣言されたクラスを持っています:
そのクラスには、次のメソッドがあります。
これは正しいと思いましたが、return ステートメントの下に赤い線が表示され、Resharper はそれnew SavedState(Width, Height)
を に変換できないと言っていますTS
。どうしてか分かりません。TS
それは拡張するクラスSavedState
だけでなく、SavedState
それ自体でもあり得ると思いました。修正するにはどうすればよいですか?
クラスの保存状態は非常に単純で、次のようになります。
c# - タイプの変更を許可しないrefパラメーターを回避するにはどうすればよいですか?
データアクセス層に次のクラス構造があるとします。
これにより、モデルで実装できるさまざまなインターフェイスと、それらのインターフェイスを処理する再利用可能な動作を使用できます。
そして、マネージャーは、の共変性のためにこれらを喜んで受け取りますIBehavior<T>
。
素晴らしい。
しかし、ここで、各動作に一連のLINQフィルターをエンティティにも適用させたいと思います。私の最初のアイデアは、このメソッドをIBehavior<T>
次のように追加することでした。
...実装動作はWhere
、その裁量で列挙に一連の句を適用します。
ただし、結局のところ、refパラメーターでは型のバリエーションは許可されていません。型の安全性とインターフェースの反変の性質の両方を維持しながら、この種の機能を実装する方法を見つけるのに苦労しています。どんなアイデアでも大歓迎です。
c# - 共分散と反分散の簡単な例
誰かが、共変性、反変性、不変性、および反不変の簡単なC#の例を提供してくれませんか(そのようなものが存在する場合)。
これまでに見たすべてのサンプルは、何らかのオブジェクトを にキャストしただけでしたSystem.Object
。
c# - インターフェイスに必要なものの子タイプのプロパティを含むインターフェイスを実装できますか?
次のエラーが発生します。
ClassName.PropertyNameは、IBasePropertyTypeの一致する戻りタイプがないため、IClassType.PropertyNameを実装できません。
さて、コードについて:
私が試みていることを行う方法はありますか?問題が共変性/反変性にあることは知っていますが、これを行う方法がわからないようです。