21

GroupByリターンタイプを探しているときに、なじみのない構文を見たところです。

public interface IGrouping<out TKey, out TElement> : IEnumerable<TElement>

MSDNソース

outメソッドで何を意味するの かは知っていますが、ジェネリックスインターフェースではわかりません。

outジェネリック型とはどういう意味ですか?

4

4 に答える 4

18

共変パラメータを示します。MSDNの説明も参照してください。本質的にそれは、それIGrouping<Aderived, Bderived>はと見なすことができると言うIGrouping<Abase, Bbase>ので、あなたは

IGrouping<Aderived, Bderived> gr = MakeGrouping(...);
IGrouping<Abase, Bbase> grBase = gr;

ifAderivedは、から派生したインターフェイスまたはタイプAbaseです。これは、タイプのパラメーターを必要とするメソッドを呼び出したいが、IGrouping<Abase, Bbase>タイプのオブジェクトしか取得できない場合に便利な機能ですIGrouping<Aderived, Bderived>。この場合、タイプパラメータの共分散により、両方のタイプは同等であると見なすことができます。

于 2012-04-05T11:29:20.073 に答える
8

これは、C#4.0(Visual Studio 2010)で導入された2つの汎用修飾子の1つです。

これは、宣言されているジェネリックパラメーターが共変であることを意味します。

in修飾子は、それが宣言されているジェネリックパラメーターが反変であることを示します。

MSDNの(Generic Modifier)および(Generic Modifier)を参照してください。

于 2012-04-05T11:27:23.790 に答える
5

outは、タイプが出力にのみ使用されることを意味します。

public interface Foo<out T>
{
   T Bar()
}

タイプが入力にのみ使用されることを意味する修飾子もあります。

public interface Foo<in T>
{
    int Bar(T x)
}

これらが使用されるのは、inのあるインターフェースはTで共変であり、outのあるインターフェースはTで反変であるためです。

于 2012-04-05T11:28:38.017 に答える
4

outこのコンテキストでのキーワードは、対応するタイプパラメーターが簡単に言えば共分散であることを示します。共分散を使用すると、ジェネリックパラメーターで指定されたタイプよりも派生したタイプを使用できます。

ところで、共分散と反変性について詳しく理解するには、Eric Lippertのこの10部シリーズを参照してください:http://blogs.msdn.com/b/ericlippert/archive/2007/10/16/covariance-and-contravariance-in- c-part-one.aspx

于 2012-04-05T11:27:42.500 に答える