問題タブ [generic-constraints]

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

c# - ジェネリック制約に準拠した型の変数を渡すことができません

上記があるとしましょう。以下の関数は失敗します:

上記のコードの失敗は何ですか?ILovable<T>Care取り込む機能がTありIEquatable<T>ます。上記の関数では、同じ関数を呼び出して、型であるものCareを渡します。やっぱりです。TintintIEquatable<int>

私は何が間違っているのですか?それを修正するための回避策はありますか?

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

c# - 単純な一般的な誤解

その場合のエラーを理解するのを手伝ってもらえますか?

SomeClass<T>asをビルドしても

すべての(?)ケースを含めるために明示的にベースインターフェイスを渡しますが、それでもエラーがスローされます

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

c# - ジェネリック クラス c# で演算子の where を使用する方法は?

こんにちは、私はクラスを持ちたいです:

T を + 演算子と * 演算子で加算および乗算できるようにしたい

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

c# - System.Array を型制約にできないのはなぜですか?

私は、いくつかの異なるタイプの配列を使用した小さなプロジェクトに取り組んでいます (例: 、double[]。検証/テスト/健全性の目的で、これらの配列のいくつかをコンソールに出力しています。したがって、複数の機能があります。以下のようになります (この例では単純化されています - 1 次元配列のみを扱っていると仮定します):float[]int[]

私は無限の知恵で、これらの関数の汎用バージョンを作成するだけで、コードの重複をいくらか減らすことができると考えました。だから私はこれを試しました:

Intellisense は文句を言いませんが、コンパイラは非常に興味深いエラーで失敗します。

Constraint cannot be special class 'System.Array'

説明を探しました (類似または封印されたクラスですが、 msdnObjectに関する言及以外にあまり見つかりませんでした。なぜそうなのか説明してもらえますか?の型制約を指定できないのはなぜですか?System.Array

ps: これを入力しているときに、次のような単純な関数を使用して、当初望んでいたことをより簡単に達成できることに気付きました。

これが、コンパイラに配列に関する特別な規則がある理由ですか?

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

c# - サブクラス化せずに型制約付きジェネリック クラスをインスタンス化する

バックグラウンド

[背景に興味がない場合は、質問にスキップしてください]

先日読んでいるときに、この汎用クラス定義に出くわし、しばらくの間困惑しました。

タイプ自体がどうなっTているのかと戸惑いました。ある種の奇妙な再帰的制約のように見えました。Entity<T>Entity<T>

次に、この制約はサブクラス化によって満たすことができることに気付きました (もちろん、これabstractはクラスに要求されることです)。

ここで、 typeTはから派生しているEntity<T>ため、型であることが保証されています。DeriverEntity<Deriver>

質問

とにかく、クラスが抽象クラスでない場合、それを直接インスタンス化できるのではないかと思いました。

与えられた

Entity<T>直接インスタンス化できますか?

明らかに、次のことは言えません。

SomeClass制約を満たさないからwhere T : Entity<T>です。

明らかな「なぜそれをしたいのですか?」を無視します。abstractこれは本質的に、キーワードを使用せずにクラスを使用する前にクラスが確実に派生されるようにする方法ですか?

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

c# - 異なる型制約で既に定義されている同じ署名を持つメンバー

排他的と思われるさまざまな制約を持つメソッドのオーバーロードに関する問題に遭遇しました。それが私の例です:

そして、これは次のエラー「同じ署名を持つメンバーが既に定義されています」でコンパイルされません。両方の条件を同時に満たすことは可能ですか、それとも C# コンパイラの制限ですか?

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

c# - 値型と参照型のジェネリック インターフェイス型制約の定義

この一般的な制約を機能させるのに問題があります。

以下に2つのインターフェースがあります。

ICommandHandlers の TResult 型を制約して、ICommandResult を実装する型のみを使用できるようにしたいと考えていますが、ICommandResult には独自の制約を指定する必要があります。ICommandResult は、その Result プロパティから値または参照型を返す可能性があります。明らかな何かが欠けていますか?ありがとう。

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

c# - c#テンプレート何かから​​派生したクラスに制約を適用するにはどうすればよいですか?

再び愚かな質問の時間。

私は次のような基本クラスを介していくつかのコードを取り込むこのクラスを持っています:

テンプレート機能を追加したい

しかし、いくつかの制約を提供する必要があるときに、コンパイルするために必要な指のマングリングの種類を理解することはできません。

これはできますか?

どうもありがとう。

bg

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

java - 一般的な制約を使用した Java ファクトリ パターン

私は持っている

そして、私はそれをこのように呼びます

ここで具象クラスは を実装しIParsableます。実行時のアサート チェックを削除し、コンパイル時のチェックを入れて、'IParsable' かどうかを確認し、parse を呼び出すことはできますか?

また、メソッドでコンパイル時に IFoo<-->Foo 実装関係を強制しgetItem()、型キャストを削除する方法があるかどうか疑問に思っていました(T)か?

編集:私は概要を説明すると思いましIFooFoo

EDIT2:

このようなリファクタリングを考えただけで、コンパイル時のチェックではない唯一のものは、インターフェイスと実装の関係です。