C#でジェネリック型引数を指定するときに `dynamic`を使用するにはどうすればよいですか?

qqqqqqq

dynamicC#でジェネリック型引数を指定するときにどのように使用しますか?

私はC#の本でCLRを読んでいます。そして、私は次の段落に出くわします:

ジェネリッククラス(参照型)、構造(値型)、インターフェイス、デリゲート、またはメソッドにジェネリック型引数を指定するときに動的を使用することもできます。これを行うと、コンパイラは動的をオブジェクトに変換し、必要に応じてさまざまなメタデータにDynamicAttributeを適用します。使用している汎用コードはすでにコンパイルされており、型はオブジェクトと見なされることに注意してください。コンパイラがジェネリックコードでペイロードコードを生成しなかったため、動的ディスパッチは実行されません。

私が理解している限り、この抜粋はdynamic、(たとえば)クラス定義の型引数としてを使用できることを示しています。しかし、これを試した後、type引数で他のプレースホルダーを使用するのと何ら変わりはないという結論に達しました。ですから、私の理解が正しいとは思えません。

using System;

namespace myprogram
{
    class A<dynamic> {
        public dynamic a;
    }

    class B {
        public Int32 b;
    }

    class C<T> {
        public T c;
    }

    class Program {
        static void Main(string[] args) {
            //Cannot implicitly convert type 'string' to 'myprogram.B' [Console.NET]csharp(CS0029)
            //A<B> a = new A<B> {a = "foo"};

            //Cannot implicitly convert type 'string' to 'myprogram.B' [Console.NET]csharp(CS0029)
            //C<B> c = new C<B> {c = "foo"};

            //as you can see it does not matter if I use the T or dynamic, the effect is the same
            //so, what is the use of using the dynamic in the class definition?
        }
    }
}
スイーパー

タイプ「引数」とタイプ「パラメータ」の違いを理解することは非常に重要です。

このことを考慮:

class Foo<T> { } // "T" is a type parameter

...

Foo<int> f; // "int" is a type argument

型パラメーターは、このジェネリック型/メソッドに渡すことができる型を宣言します。型パラメーターは基本的に識別子であり、既存の型ではありません。型をジェネリック型/メソッドに渡す場合、渡した型は型引数と呼ばれます。これは、メソッドパラメータと引数の違いと非常によく似ています

したがって、抜粋では、ジェネリック型が与えられた場合、その型dynamic渡すことができobject、CLRによって扱われると述べようとしています。これができるという意味ではありません。

class A<dynamic> {

}

これは、次のことができることを意味します。

var list = new List<dynamic>();

または、コードで宣言されている型を使用します。

C<dynamic> c = new C<dynamic> {c = "foo"};

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

引数キーがジェネリック型でリストされていることを確認するにはどうすればよいですか?

分類Dev

C#のジェネリック関数で型を渡すにはどうすればよいですか?

分類Dev

Rで、ジェネリックメソッドが...(ドット)引数を取るように指定するにはどうすればよいですか?

分類Dev

インターフェイスをC#ジェネリック型制約として使用するにはどうすればよいですか?

分類Dev

ジェネリッククラスで列挙型を使用するときに型引数を指定する必要があるのはなぜですか

分類Dev

この関数をジェネリック型にするにはどうすればよいですか?

分類Dev

値タプルでジェネリック型を使用するにはどうすればよいですか?

分類Dev

Fn(T)+ '静的レジスタを'ジェネリック型引数Tの '静的として作成するにはどうすればよいですか?

分類Dev

別のジェネリック基本クラスにC#ジェネリック型制約を追加するにはどうすればよいですか?

分類Dev

C# で、2 つの異なる型でジェネリックスを使用するにはどうすればよいですか?

分類Dev

Swiftでジェネリック型の引数を取る関数を再割り当てするにはどうすればよいですか?

分類Dev

指定されたジェネリック型で関数型を作成するにはどうすればよいですか?

分類Dev

ジェネリック型とダブルを比較するにはどうすればよいですか

分類Dev

C#でオープンジェネリックの型パラメーターの数を取得するにはどうすればよいですか?

分類Dev

C#ジェネリックスパラメーターとしてオブジェクト型を持たないジェネリックメソッドの引数として渡された型を取得するにはどうすればよいですか?

分類Dev

C#ジェネリック型から非ジェネリック型に継承するときに冗長性を減らすにはどうすればよいですか?

分類Dev

ジェネリック関数型にオプションの引数型を含めるにはどうすればよいですか?

分類Dev

C ++でジェネリックstringToVector関数を作成するにはどうすればよいですか?

分類Dev

Objective-Cのジェネリック型を見つけるにはどうすればよいですか?

分類Dev

C#でジェネリック制約の有効な型オブジェクトを取得するにはどうすればよいですか?

分類Dev

パラメータを転送するときにジェネリック型を保持するにはどうすればよいですか?

分類Dev

Dapper QueryMultipleを使用するときに、ジェネリック引数に型を指定する

分類Dev

実行時にジェネリック型を取得するにはどうすればよいですか?

分類Dev

ジェネリック型SignedNumericをFloatに変換するにはどうすればよいですか?

分類Dev

ジェネリック型に拡張機能を追加するにはどうすればよいですか?

分類Dev

ジェネリック型 'State <T>'を使用するには、1つの型引数C#が必要です。

分類Dev

単一の型パラメーターを使用してジェネリック型の2つの具象型引数を指定するにはどうすればよいですか?

分類Dev

ジェネリック型を含む配列を宣言するにはどうすればよいですか?

分類Dev

複合ジェネリック型から値を取得するにはどうすればよいですか?

Related 関連記事

  1. 1

    引数キーがジェネリック型でリストされていることを確認するにはどうすればよいですか?

  2. 2

    C#のジェネリック関数で型を渡すにはどうすればよいですか?

  3. 3

    Rで、ジェネリックメソッドが...(ドット)引数を取るように指定するにはどうすればよいですか?

  4. 4

    インターフェイスをC#ジェネリック型制約として使用するにはどうすればよいですか?

  5. 5

    ジェネリッククラスで列挙型を使用するときに型引数を指定する必要があるのはなぜですか

  6. 6

    この関数をジェネリック型にするにはどうすればよいですか?

  7. 7

    値タプルでジェネリック型を使用するにはどうすればよいですか?

  8. 8

    Fn(T)+ '静的レジスタを'ジェネリック型引数Tの '静的として作成するにはどうすればよいですか?

  9. 9

    別のジェネリック基本クラスにC#ジェネリック型制約を追加するにはどうすればよいですか?

  10. 10

    C# で、2 つの異なる型でジェネリックスを使用するにはどうすればよいですか?

  11. 11

    Swiftでジェネリック型の引数を取る関数を再割り当てするにはどうすればよいですか?

  12. 12

    指定されたジェネリック型で関数型を作成するにはどうすればよいですか?

  13. 13

    ジェネリック型とダブルを比較するにはどうすればよいですか

  14. 14

    C#でオープンジェネリックの型パラメーターの数を取得するにはどうすればよいですか?

  15. 15

    C#ジェネリックスパラメーターとしてオブジェクト型を持たないジェネリックメソッドの引数として渡された型を取得するにはどうすればよいですか?

  16. 16

    C#ジェネリック型から非ジェネリック型に継承するときに冗長性を減らすにはどうすればよいですか?

  17. 17

    ジェネリック関数型にオプションの引数型を含めるにはどうすればよいですか?

  18. 18

    C ++でジェネリックstringToVector関数を作成するにはどうすればよいですか?

  19. 19

    Objective-Cのジェネリック型を見つけるにはどうすればよいですか?

  20. 20

    C#でジェネリック制約の有効な型オブジェクトを取得するにはどうすればよいですか?

  21. 21

    パラメータを転送するときにジェネリック型を保持するにはどうすればよいですか?

  22. 22

    Dapper QueryMultipleを使用するときに、ジェネリック引数に型を指定する

  23. 23

    実行時にジェネリック型を取得するにはどうすればよいですか?

  24. 24

    ジェネリック型SignedNumericをFloatに変換するにはどうすればよいですか?

  25. 25

    ジェネリック型に拡張機能を追加するにはどうすればよいですか?

  26. 26

    ジェネリック型 'State <T>'を使用するには、1つの型引数C#が必要です。

  27. 27

    単一の型パラメーターを使用してジェネリック型の2つの具象型引数を指定するにはどうすればよいですか?

  28. 28

    ジェネリック型を含む配列を宣言するにはどうすればよいですか?

  29. 29

    複合ジェネリック型から値を取得するにはどうすればよいですか?

ホットタグ

アーカイブ