問題タブ [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.
c# - ジェネリック制約に準拠した型の変数を渡すことができません
上記があるとしましょう。以下の関数は失敗します:
上記のコードの失敗は何ですか?ILovable<T>
をCare
取り込む機能がT
ありIEquatable<T>
ます。上記の関数では、同じ関数を呼び出して、型であるものCare
を渡します。やっぱりです。T
int
int
IEquatable<int>
私は何が間違っているのですか?それを修正するための回避策はありますか?
c# - 単純な一般的な誤解
その場合のエラーを理解するのを手伝ってもらえますか?
SomeClass<T>
asをビルドしても
すべての(?)ケースを含めるために明示的にベースインターフェイスを渡しますが、それでもエラーがスローされます
c# - ジェネリック クラス c# で演算子の where を使用する方法は?
こんにちは、私はクラスを持ちたいです:
T を + 演算子と * 演算子で加算および乗算できるようにしたい
c# - System.Array を型制約にできないのはなぜですか?
私は、いくつかの異なるタイプの配列を使用した小さなプロジェクトに取り組んでいます (例: 、double[]
。検証/テスト/健全性の目的で、これらの配列のいくつかをコンソールに出力しています。したがって、複数の機能があります。以下のようになります (この例では単純化されています - 1 次元配列のみを扱っていると仮定します):float[]
int[]
私は無限の知恵で、これらの関数の汎用バージョンを作成するだけで、コードの重複をいくらか減らすことができると考えました。だから私はこれを試しました:
Intellisense は文句を言いませんが、コンパイラは非常に興味深いエラーで失敗します。
Constraint cannot be special class 'System.Array'
説明を探しました (類似または封印されたクラスですが、 msdnObject
に関する言及以外にあまり見つかりませんでした。なぜそうなのか説明してもらえますか?の型制約を指定できないのはなぜですか?System.Array
ps: これを入力しているときに、次のような単純な関数を使用して、当初望んでいたことをより簡単に達成できることに気付きました。
これが、コンパイラに配列に関する特別な規則がある理由ですか?
c# - サブクラス化せずに型制約付きジェネリック クラスをインスタンス化する
バックグラウンド
[背景に興味がない場合は、質問にスキップしてください]
先日読んでいるときに、この汎用クラス定義に出くわし、しばらくの間困惑しました。
タイプ自体がどうなっT
ているのかと戸惑いました。ある種の奇妙な再帰的制約のように見えました。Entity<T>
Entity<T>
次に、この制約はサブクラス化によって満たすことができることに気付きました (もちろん、これabstract
はクラスに要求されることです)。
ここで、 typeT
はから派生しているEntity<T>
ため、型であることが保証されています。Deriver
Entity<Deriver>
質問
とにかく、クラスが抽象クラスでない場合、それを直接インスタンス化できるのではないかと思いました。
与えられた
Entity<T>
直接インスタンス化できますか?
明らかに、次のことは言えません。
SomeClass
制約を満たさないからwhere T : Entity<T>
です。
明らかな「なぜそれをしたいのですか?」を無視します。abstract
これは本質的に、キーワードを使用せずにクラスを使用する前にクラスが確実に派生されるようにする方法ですか?
c# - 異なる型制約で既に定義されている同じ署名を持つメンバー
排他的と思われるさまざまな制約を持つメソッドのオーバーロードに関する問題に遭遇しました。それが私の例です:
そして、これは次のエラー「同じ署名を持つメンバーが既に定義されています」でコンパイルされません。両方の条件を同時に満たすことは可能ですか、それとも C# コンパイラの制限ですか?
c# - 値型と参照型のジェネリック インターフェイス型制約の定義
この一般的な制約を機能させるのに問題があります。
以下に2つのインターフェースがあります。
ICommandHandlers の TResult 型を制約して、ICommandResult を実装する型のみを使用できるようにしたいと考えていますが、ICommandResult には独自の制約を指定する必要があります。ICommandResult は、その Result プロパティから値または参照型を返す可能性があります。明らかな何かが欠けていますか?ありがとう。
c# - c#テンプレート何かから派生したクラスに制約を適用するにはどうすればよいですか?
再び愚かな質問の時間。
私は次のような基本クラスを介していくつかのコードを取り込むこのクラスを持っています:
テンプレート機能を追加したい
しかし、いくつかの制約を提供する必要があるときに、コンパイルするために必要な指のマングリングの種類を理解することはできません。
これはできますか?
どうもありがとう。
bg
java - 一般的な制約を使用した Java ファクトリ パターン
私は持っている
そして、私はそれをこのように呼びます
ここで具象クラスは を実装しIParsable
ます。実行時のアサート チェックを削除し、コンパイル時のチェックを入れて、'IParsable' かどうかを確認し、parse を呼び出すことはできますか?
また、メソッドでコンパイル時に IFoo<-->Foo 実装関係を強制しgetItem()
、型キャストを削除する方法があるかどうか疑問に思っていました(T)
か?
編集:私は概要を説明すると思いましIFoo
たFoo
EDIT2:
このようなリファクタリングを考えただけで、コンパイル時のチェックではない唯一のものは、インターフェイスと実装の関係です。