が、私は次のクラスに引数の型Xは、Xが句
public class CalculatorManipulator<TCalculator>
where TCalculator : CachableCalculator
を持って、それは辞書が含まれている場所として指定されたジェネリック型Tに割り当てられませんそう
Calculators.Add(calc.CustomCaption, new CachableCalculator(calc, fg, cache));
のような項目は、なぜ、この収率は、今回のエラーをコンパイルん:
Argument type CachableCalculator is not assignable to parameter type TCalculator.
コンパイラは、TCalculator
がCachableCalculator
であることを認識しています。
私はなぜそれを自動的に行うことができるのですか?
これはDog
はAnimal
あるTCalculator
Calculators.Add(calc.CustomCaption, (TCalculator)new CachableCalculator(calc, fg, cache));
しかし、私たちは犬を追加しています。< – Hristo
@Chrisあなたはそれを知っています。コンパイラはしません。実際、あなたのコードは有効ではないと思います。辞書は 'Dictionary'ですが、あなたは** Dog ** - 新しいCachableCalculator(...)ではなく** Animal **を明示的に**追加しています。 'は' TCalculator'ではありません**。これは 'CachableCalculator'です。あなたのコードは** CalculatorManipulator のために**実際にしか**働いています –
@MarcGravellは彼のコメントで正しいです、コードはキャストでコンパイルしますが、実行時にクラッシュします。 –