1

現在、ジェネリックのセクションを読んでいて、「変換タイプの制約」というタイトルのセクションに出くわしました。ジョンの説明が頭に浮かびませんでしたので、Google に用語を入力して、この正確なフレーズを使用したり、詳細に説明したりする結果を見つけられませんでした。

「コンバージョン タイプの制約」について詳しく説明しているウェブサイトやページはありますか。あるいは、彼らを説明するためにもっと広く使われている用語を誰かが知っているでしょうか?

与えられた説明は次のとおりです。A constraint that lets you specify another type that the type argument must be implicitly convertible to via an identity, reference or boxing conversion

4

3 に答える 3

1

Jon は、サポートされている制約を列挙しているだけだと思います。MSDN C# 言語仕様で説明されているように、ID、参照、およびボックス変換の簡単な説明を以下に示します。

6.1.1 ID 変換

ID 変換は、任意の型から同じ型に変換します。この変換は、必要な型を既に持っているエンティティがその型に変換可能であると言える場合にのみ存在します。

6.1.4 暗黙の参照変換

暗黙の参照変換は次のとおりです。

  • 任意の参照型からオブジェクトへ。
  • S が T から派生している場合、任意のクラス型 S から任意のクラス型 T へ。
  • S が T を実装する場合、任意のクラス型 S から任意のインターフェイス型 T へ。
  • S が T から派生している場合、任意のインターフェイス タイプ S から任意のインターフェイス タイプ T へ。
  • 要素型 SE を持つ配列型 S から、要素型 TE を持つ配列型 T まで、次のすべてが true の場合:
    • S と T は要素の種類のみが異なります。つまり、S と T の次元数は同じです。
    • SE と TE はどちらも参照型です。
    • SE から TE への暗黙的な参照変換が存在します。
  • 任意の配列型から System.Array まで。
  • デリゲート型から System.Delegate へ。
  • null 型から任意の参照型まで。

暗黙的な参照変換は、常に成功することが証明できる参照型間の変換であるため、実行時にチェックする必要はありません。暗黙的または明示的な参照変換では、変換されるオブジェクトの参照 ID が変更されることはありません。つまり、参照変換によって参照の型が変更される場合がありますが、参照されているオブジェクトの型または値が変更されることはありません。

6.1.5 ボクシング変換

ボックス化変換により、値型を暗黙的に参照型に変換できます。値型の値のボックス化は、オブジェクト インスタンスの割り当てと、値型の値のそのインスタンスへのコピーで構成されます。

4.3.1 ボックス変換も参照してください。

標準 ECMA-334、C# 言語仕様には変換専用の章があります(「13. 変換」を参照) 。

于 2013-11-05T13:51:06.243 に答える
1

ジョンは、ティムがすでに述べたように、十分に文書化されている型パラメーターの制約に彼自身の用語を使用しているだけだと思います。おそらく彼は、(おそらく完全に正しくない) エラー メッセージ「The type 'x' must be convertible to 'y' in order to use it as parameter T ...」に惑わされたのかもしれません。クラスまたはインターフェイスであり、渡された型がそのクラスから派生していない場合は、それぞれインターフェイスを実装しません。

ここでの大きな問題は、「コンバーチブル」が何を意味するかということです。型パラメーター制約のドキュメントでは、制約がクラスまたはインターフェイスである場合、型はそのクラスから派生するか、インターフェイスを実装する必要があるとのみ述べています。派生していない、またはインターフェイスを実装していない型を渡すと、上記のエラー メッセージが表示されます。

派生していない、またはインターフェイスを実装していない型が、変換を許可する暗黙の変換演算子を実装している場合でも、型パラメーターで使用することはできません (確かに試してみました)。

別の可能な「変換」は頭に浮かびません。クラスが別のクラスから派生している場合、または基本型を使用してインスタンスを参照するインターフェイスを実装している場合、またはインターフェイスは実際には変換ではなく、ポリモーフィズムです。

于 2013-11-05T14:00:58.657 に答える
1

はい、これは公式用語ではありません。私の知る限り、セクション 10.1.5 に示されている構造でclass-typeinterface-type、またはtype-parameterとしてリストされている 3 つの同様の制約を表す公式用語はありません。 C# 仕様の。

残念なことに、この一連の制約には公式の用語がありません。それらは明らかに密接に関連しているためです。これらはすべて、型引数から指定された拘束タイプ。

于 2013-11-06T10:00:41.607 に答える