0

このスニペットをチェックしてください

public interface IExample<T>
{
    IExample<T> Exposes<TInclude>() 
        where T : TInclude;
}

TがTIncludeにキャスト可能であることを強制するコンパイル時を探しています。ランタイムチェックを実行できますが、コンパイル時であることが望ましいでしょう。

上記は、Tが定義されていないことを示しています。

助言がありますか?私がしようとしていることはC#ジェネリックで可能ですか?

4

3 に答える 3

5

あなたの質問を言い換える:

から派生した、または任意のタイプwhereの制約を適用する句TIncludeを作成することができます。「反対方向」の制約を適用しようとしています。つまり、の「基本タイプ」です。これは可能ですか?TTTIncludeTT

いいえ。C#はそのような制約をサポートしていません。ごめん。

助言がありますか?

Scalaはそのような制約をサポートしていると思います。Javaと同様に、Javaのやり方は少し奇妙です。しかし、私はあなたが言語を変えたくないと思います。

このインターフェースで実際に表現したいコンセプトを詳しく説明していただけますか?あなたが何をしようとしているのかがわかっていれば、実用的なアドバイスを提供するのは簡単です。

于 2013-03-12T20:12:00.707 に答える
1

次のように、タイプ制約をインターフェイスレベルに移動できます。

public interface IExample<T, U>
    where T : U
{
    IExample<T, U> Exposes();
}
于 2013-03-12T19:48:48.050 に答える
0

いつか実装される可能性があります。1.2一般化された制約を参照してください。

于 2013-03-12T20:15:21.557 に答える