問題タブ [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.

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

c# - C#のrefおよびoutパラメータであり、バリアントとしてマークすることはできません

ステートメントはどういう意味ですか?

ここから

C#のrefおよびoutパラメータであり、バリアントとしてマークすることはできません。

1)次のことができないということですか。

2)それとも、私が次のものを持てないという意味ですか。

(2)を試してみましたが、うまくいきました。

0 投票する
3 に答える
265 参照

c# - リストから変換できないのはなぜですかリストするIScreenがIRenderableを実装している場合でも?

かなり自明の質問です、どんな答えでもうれしいです。私にとってそれは意味がありません。情報を失うことは気にしません。どういうわけかIRenderableを継承するすべてのリストを1つのリストに連結してから、そのリストでIRenderableメソッドを呼び出したいだけです。これが私が忘れていたプログラミングの基本的なルールだと感じています...

編集:これはコードです:

edit2:ところで、.net 4.0をインストールしましたが、参照はSystem.dllバージョン2.0.5.0のままです。

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

c# - C#4.0でインターフェイス/デリゲートの差異を判断する方法はありますか?

これで、C#のインターフェイスとデリゲートにジェネリック共変性と反変性ができたので、が与えられたらType、そのジェネリック引数の共変性/反変性を理解できます。私は独自の実装を書き始めました。これは、特定の型のすべてのメソッドを調べて、戻り値の型や引数が汎用引数の型と一致するかどうかを確認します。問題は、私がこれを持っていても:

私のロジックを使用すると、それは反変であるはずのように見えますが、実際には指定しなかったため、次のようになります。

(inパラメーター)実際には反変ではありません。これが私の質問につながります:ジェネリックパラメーターの分散を決定する方法はありますか?

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

.net - .NET 4 のクラスが共変でないのはなぜですか?

重複の可能性:
C# 4.0 のクラスに一般的な差異がないのはなぜですか?

新人プログラマーとして、.NET 4 のバリアンスについていくつか質問があります。それがどのように機能するかということではなく、特定のものがバリアントでない理由と、他の人にとってこれが役立つかどうかについてです。

質問1:

.NET 4 では、インターフェイスとデリゲートが共変/反変になる可能性があることは知っていますが、なぜクラスではないのでしょうか? だから、質問1:

これはどういうわけか安全ではありませんか?これは役に立ちませんか?


質問2:

質問 2 は質問 1 から続きますが、分散よりも署名を扱う場合があります。MustOverride メンバーを持つ MustInherit クラスがあるとします。

派生クラスで、SomeClass をオーバーライドして BaseClass の派生クラスを返すことができないのはなぜですか? これは危険ですか?署名が継承関係をチェックしていないだけですか?

これが.NET 4で許可されていない理由についての洞察をいただければ幸いです。

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

c# - 反変のデリゲートの値の型

反変性がC#の値型で機能しない理由を誰でも明らかにできますか?

以下は動作しません

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

covariance - 誰かがタイプ共変性/反変性と圏論の関係を説明できますか?

圏論について読み始めたばかりですが、CSの反変性/共分散と圏論の関係を誰かが説明していただければ幸いです。いくつかの例のカテゴリーは何でしょうか(つまり、それらのオブジェクト/射は何ですか?)?前もって感謝します?

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

c# - IEnumerable とは反変?

この投稿 ( http://blogs.msdn.com/b/brada/archive/2005/01/18/355755.aspx ) はIEnumerable<T>、反変であると述べています。outただし、型 T はパラメーターであるため、共変です。では、どのような文脈でIEnumerable<T>反変でしょうか??

混乱しないことを願っています!事前に答えてくれてありがとう!

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

.net - 反分散と共分散 - C# による CLR

c# の第 3 版による CLR には、私には理解できない例があります。

不変 そのジェネリック型パラメーターを変更できないことを意味します。この章ではこれまで、不変のジェネリック型パラメーターのみを示してきました。n

反変 ジェネリック型パラメーターがクラスから派生したクラスに変更できることを意味します。C# では、反変のジェネリック型パラメーターをin キーワードで示します。

反変のジェネリック型パラメーターは、メソッドの引数などの入力位置にのみ表示できます。n 共変 ジェネリック型引数がクラスからその基底クラスの 1 つに変更できることを意味します。C# では、共変のジェネリック型パラメーターをout キーワードで示します。共変のジェネリック型パラメーターは、メソッドの戻り値の型などの出力位置にのみ表示できます。

次に、著者は次の例を挙げます。

ここで、ジェネリック型パラメーター T は in キーワードでマークされ、反変になります。ジェネリック型パラメーター TResult は out キーワードでマークされ、共変になります

ここで、次のページ (292) で問題に遭遇します。彼は、インターフェイスを使用するときに反対のことを言います。

一般的な引数を取り、値を返すデリゲートを使用する場合は、できる限り反変性と共変性の in キーワードと out キーワードを常に指定することをお勧めします。これにより、悪影響がなく、より多くのシナリオでデリゲートを使用できるようになります。デリゲートと同様に、ジェネリック型パラメーターを持つインターフェイスは、その型パラメーターを反変または共変にすることができます。以下は、反変 >generic 型パラメーターを使用したインターフェイスの例です。

T は反変であるため、次のコードを正常にコンパイルして実行することができます。

2 番目の例では、out キーワード ( IEnumerator<out T>) を使用し、それを反変と呼んでいます。これは正しいですか、何か不足していますか。インターフェイスで反変と共変を定義する違いはありますか? 私はこの本に関して Oreilly の Web サイトにアクセスしましたが、これはリストされていません。

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

c# - 共変性が機能していない

これまでのところすべて問題ありませんが、なぜこれがnullを作成するのですか?

myControlがnullになりました...

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

scala - Scala:関数をファーストクラスのオブジェクトとして使用する際の問題

ジェネリック関数のコレクションが必要ですが、好きなように実行できません。私は作成しました

しかし、関数を挿入しようとするとすぐに、たとえば

エラーが発生します。パラメータと戻り値の型を考慮しないジェネリック関数コレクションを宣言するにはどうすればよいですか?