キャストにおけるジェネリック制約を理解する
ジェネリックは、C# でのタイプセーフ プログラミングのための強力なメカニズムを提供します。ただし、継承クラスと基本クラスに関しては、キャストに関連する特定の制限があります。
次の例を考えてみましょう。
public abstract class EntityBase { } public class MyEntity : EntityBase { } public abstract class RepositoryBase<T> where T : EntityBase { } public class MyEntityRepository : RepositoryBase<MyEntity> { }
このシナリオでは、MyEntityRepository をリポジトリベース<エンティティベース>実行時例外が発生します。
説明:
MyEntityRepository は、RepositoryBase
ジェネリックバリアンスの影響:
ジェネリックバリアンスとは、サブタイプとスーパータイプの関係を処理するジェネリック型の機能を指します。 C# では、一般的な共分散と反分散が限られた範囲でサポートされています。ただし、この場合、基本クラスは派生クラスのサブタイプではないため、共分散は適用できません。
考えられる解決策:
残念ながら、直接的な解決策はありません。 MyEntityRepository を RepositoryBase
以上がC# で `RepositoryBase` を `RepositoryBase` にキャストできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。