ジェネリックのみをアップキャストでき、ダウンキャストできないのはなぜですか?
私の制約が言っていて、Uが有効なwhere T : BaseClass
BaseClassから派生している場合、コンパイラにどのように明確ではありませんか?(U)objectOfTypeT
2 に答える
5
有効でない可能性があるためです。このことを考慮:
class Base { }
class A : Base { }
class B : Base { }
A temp1 = new A();
B temp2 = (B)temp1; // not valid
それらが同じ基本クラスを共有しているからといって、一方を他方に型キャストできるという意味ではありません。
as
演算子を使用してこれを回避できることに注意してください。
var result = objectOfTypeT as U; // this does not give any compilation error
// but will result in a null reference if
// objectOfTypeT cannot be converted to U
于 2010-10-24T08:14:33.090 に答える
2
私が質問を間違って読んでいない限り、あなたは持っている可能性があります:
class A:BaseClass{}
class B:BaseClass{}
T=AとU=Bの場合、どちらの制約も問題ありませんが、TからUへのキャストは明らかに無効です。
Uが単なる別のクラスである場合でも、同じことが当てはまります。Tは、制約で指定しない限り、Uと同じチェーンにあることはわかりません(ジェネリック制約は、役立つ場合は、他のジェネリック型引数を含むことができます)。
于 2010-10-24T08:13:20.143 に答える