Type.GetGenericParameterConstraints メソッドとは? わかりやすく解説

Weblio 辞書 > コンピュータ > .NET Framework クラス ライブラリ リファレンス > Type.GetGenericParameterConstraints メソッドの意味・解説 

Type.GetGenericParameterConstraints メソッド

メモ : このメソッドは、.NET Framework version 2.0新しく追加されたものです。

現在のジェネリック型パラメータの制約を表す Type オブジェクト返します

名前空間: System
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

Public Overridable Function
 GetGenericParameterConstraints As Type()
Dim instance As Type
Dim returnValue As Type()

returnValue = instance.GetGenericParameterConstraints
public virtual Type[] GetGenericParameterConstraints ()
public:
virtual array<Type^>^ GetGenericParameterConstraints ()
public Type[] GetGenericParameterConstraints ()
public function GetGenericParameterConstraints
 () : Type[]

戻り値
現在のジェネリック型パラメータの制約を表す Type配列

例外例外
例外種類条件

InvalidOperationException

現在の Type オブジェクトは、ジェネリック型パラメータではありません。つまり、IsGenericParameter プロパティfalse返します

解説解説
使用例使用例

異な制約を持つ 2 つの型パラメータ指定したジェネリック型 Test定義するコード例次に示しますプログラム実行すると、GenericParameterAttributes プロパティおよび GetGenericParameterConstraints メソッド使って制約調べられます。

Imports System
Imports System.Reflection

' Define a sample interface to use as an interface constraint.
Public Interface ITest
End Interface 

' Define a base type to use as a base class constraint.
Public Class Base
End Class 

' Define the generic type to examine. The first generic type parameter
,
' T, derives from the class Base and implements ITest. This demonstrates
' a base class constraint and an interface constraint. The second generic
 
' type parameter, U, must be a reference type (Class) and must have
 a 
' default constructor (New). This demonstrates special constraints.
'
Public Class Test(Of T As
 {Base, ITest}, U As {New, Class}) 
End Class

' Define a type that derives from Base and implements ITtest. This type
' satisfies the constraints on T in class Test.
Public Class Derived
    Inherits Base
    Implements ITest
End Class 

Public Class Example
    
    Public Shared Sub Main()
 
        ' To get the generic type definition, omit the type
        ' arguments but retain the comma to indicate the number
        ' of type arguments. 
        '
        Dim def As Type = GetType(Test(Of
 ,))
        Console.WriteLine(vbCrLf & "Examining generic type
 {0}", def)
        
        ' Get the type parameters of the generic type definition,
        ' and display them.
        '
        Dim defparams() As Type = def.GetGenericArguments()
        For Each tp As Type
 In defparams

            Console.WriteLine(vbCrLf & "Type parameter: {0}",
 tp.Name)
            Console.WriteLine(vbTab & ListGenericParameterAttributes(tp))
            
            ' List the base class and interface constraints. The
            ' constraints do not appear in any particular order. An
            ' empty array is returned if there are no constraints.
            '
            Dim tpConstraints As Type() = _
                tp.GetGenericParameterConstraints()
            For Each tpc As
 Type In  tpConstraints
                Console.WriteLine(vbTab & tpc.ToString())
            Next tpc
        Next tp
    
    End Sub 
    
    ' List the variance and special constraint flags.
    '
    Private Shared Function
 ListGenericParameterAttributes(ByVal t As
 Type) As String 
        Dim retval As String
        Dim gpa As GenericParameterAttributes
 = t.GenericParameterAttributes

        ' Select the variance flags.
        Dim variance As GenericParameterAttributes
 = _
            gpa And GenericParameterAttributes.VarianceMask
        
        If variance = GenericParameterAttributes.None Then
            retval = "No variance flag;"
        Else
            If (variance And GenericParameterAttributes.Covariant)
 <> 0 Then
                retval = "Covariant;"
            Else
                retval = "Contravariant;"
            End If
        End If 

        ' Select the constraint flags.
        Dim constraints As GenericParameterAttributes
 = _
            gpa And GenericParameterAttributes.SpecialConstraintMask
        
        If constraints = GenericParameterAttributes.None Then
            retval &= " no special constraints."
        Else
            If (constraints And GenericParameterAttributes.ReferenceTypeConstraint)
 <> 0 Then
                retval &= " ReferenceTypeConstraint"
            End If
            If (constraints And GenericParameterAttributes.NotNullableValueTypeConstraint)
 <> 0 Then
                retval &= " NotNullableValueTypeConstraint"
            End If
            If (constraints And GenericParameterAttributes.DefaultConstructorConstraint)
 <> 0 Then
                retval &= " DefaultConstructorConstraint"
            End If
        End If 
        Return retval
    
    End Function 
End Class 
' This example produces the following output:
'
'Examining generic type Test`2[T,U]
'
'Type parameter: T
'        No variance flag; no special constraints.
'        Base
'        ITest
'
'Type parameter: U
'        No variance flag; ReferenceTypeConstraint DefaultConstructorConstraint
' 
using System;
using System.Reflection;

// Define a sample interface to use as an interface constraint.
public interface ITest {}

// Define a base type to use as a base class constraint.
public class Base {}

// Define the generic type to examine. The first generic type parameter
,
// T, derives from the class Base and implements ITest. This demonstrates
// a base class constraint and an interface constraint. The second generic
 
// type parameter, U, must be a reference type (class) and must have
 a 
// default constructor (new()). This demonstrates special constraints.
//
public class Test<T,U> 
    where T : Base, ITest 
    where U : class, new() {}

// Define a type that derives from Base and implements ITest. This type
// satisfies the constraints on T in class Test.
public class Derived : Base, ITest {}

public class Example
{
    public static void Main()
    {
        // To get the generic type definition, omit the type
        // arguments but retain the comma to indicate the number
        // of type arguments. 
        //
        Type def = typeof(Test<,>);
        Console.WriteLine("\r\nExamining generic type {0}", def);

        // Get the type parameters of the generic type definition,
        // and display them.
        //
        Type[] defparams = def.GetGenericArguments();
        foreach (Type tp in defparams)
        {
            Console.WriteLine("\r\nType parameter: {0}", tp.Name);
            Console.WriteLine("\t{0}", 
                ListGenericParameterAttributes(tp));

            // List the base class and interface constraints. The
            // constraints are returned in no particular order. If 
            // there are no class or interface constraints, an empty
            // array is returned.
            //
            Type[] tpConstraints = tp.GetGenericParameterConstraints();
            foreach (Type tpc in tpConstraints)
            {
                Console.WriteLine("\t{0}", tpc);
            }
        }
    }

    // List the variance and special constraint flags. 
    //
    private static string
 ListGenericParameterAttributes(Type t)
    {
        string retval;
        GenericParameterAttributes gpa = t.GenericParameterAttributes;
        GenericParameterAttributes variance = gpa & 
            GenericParameterAttributes.VarianceMask;

        // Select the variance flags.
        if (variance == GenericParameterAttributes.None)
            retval = "No variance flag;";
        else
        {
            if ((variance & GenericParameterAttributes.Covariant)
 != 0)
                retval = "Covariant;";
            else
                retval = "Contravariant;";
        }

        // Select 
        GenericParameterAttributes constraints = gpa & 
            GenericParameterAttributes.SpecialConstraintMask;

        if (constraints == GenericParameterAttributes.None)
            retval += " No special constraints";
        else
        {
            if ((constraints & GenericParameterAttributes.ReferenceTypeConstraint)
 != 0)
                retval += " ReferenceTypeConstraint";
            if ((constraints & GenericParameterAttributes.NotNullableValueTypeConstraint)
 != 0)
                retval += " NotNullableValueTypeConstraint";
            if ((constraints & GenericParameterAttributes.DefaultConstructorConstraint)
 != 0)
                retval += " DefaultConstructorConstraint";
        }

        return retval;
    }
}
/* This example produces the following output:

Examining generic type Test`2[T,U]

Type parameter: T
        No variance flag; no special constraints.
        Base
        ITest

Type parameter: U
        No variance flag; ReferenceTypeConstraint DefaultConstructorConstraint
 */
using namespace System;
using namespace System::Collections;
using namespace System::Reflection;

// Define a sample interface to use as an interface constraint.
interface class ITest{};

// Define a base type to use as a class constraint.
public ref class Base{};

// Define the generic type to examine. The first generic type parameter
,
// T, derives from the class Base and implements ITest. This demonstrates
// a base class constraint and an interface constraint. In the .NET
// Framework version 2.0, C++ has no way of expressing special constraints.
// See the C# example code.
//
generic <typename T, typename U>
   where T :  Base, ITest
ref class Test {};

// Define a type that derives from Base and implements interface
// ITest. This type satisfies the constraint on T in class Test.
public ref class Derived: public
 Base, public ITest {};

public ref class Example
{
public:
   static void Main()
   {
      // Create a constructed type from Test<T,U>, and from it
      // get the generic type definition.
      //
      Type^ def = Test::typeid;
      Console::WriteLine( L"\r\nExamining generic type {0}", def );
      
      // Get the type parameters of the generic type definition,
      // and display them.
      //
      for each (Type^ tp in def->GetGenericArguments())
      {
         Console::WriteLine( L"\r\nType parameter: {0}", tp);
         Console::WriteLine( L"\t{0}", 
            ListGenericParameterAttributes( tp ) );
         
         // List the base class and interface constraints. The
         // constraints do not appear in any particular order. If
         // there are no class or interface constraints, an empty
         // array is returned.
         //
         for each (Type^ constraint in tp->GetGenericParameterConstraints())
         {
            Console::WriteLine( L"\t{0}", constraint );
         }
      }
   }

private:

   // List the variance and special constraint flags. 
   //
   static String^ ListGenericParameterAttributes( Type^ t )
   {
      String^ retval;
      GenericParameterAttributes gpa = t->GenericParameterAttributes;

      // Select the variance flag.
      GenericParameterAttributes variance =
         static_cast<GenericParameterAttributes>(
            gpa & GenericParameterAttributes::VarianceMask );

      if ( variance == GenericParameterAttributes::None )
            retval = L"No variance flag;";
      else
      {
         if ( (variance & GenericParameterAttributes::Covariant)
 !=
               GenericParameterAttributes::None )
            retval = L"Covariant;";
         else
            retval = L"Contravariant;";
      }

      // Select the special constraint flags.
      GenericParameterAttributes constraints =
         static_cast<GenericParameterAttributes>(
            gpa & GenericParameterAttributes::SpecialConstraintMask);

      if ( constraints == GenericParameterAttributes::None )
            retval = String::Concat( retval, L" No special constraints"
 );
      else
      {
         if ( (constraints & GenericParameterAttributes::ReferenceTypeConstraint)
 !=
               GenericParameterAttributes::None )
            retval = String::Concat( retval, L" ReferenceTypeConstraint"
 );

         if ( (constraints & GenericParameterAttributes::NotNullableValueTypeConstraint)
 !=
               GenericParameterAttributes::None )
            retval = String::Concat( retval, L" NotNullableValueTypeConstraint"
 );

         if ( (constraints & GenericParameterAttributes::DefaultConstructorConstraint)
 !=
               GenericParameterAttributes::None )
            retval = String::Concat( retval, L" DefaultConstructorConstraint"
 );
      }

      return retval;
   }
};

int main()
{
   Example::Main();
}

/* This example produces the following output:

Examining generic type Test`2[T,U]

Type parameter: T
        No variance flag; No special constraints
        Base
        ITest

Type parameter: U
        No variance flag; No special constraints
 */
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「Type.GetGenericParameterConstraints メソッド」の関連用語

Type.GetGenericParameterConstraints メソッドのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Type.GetGenericParameterConstraints メソッドのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2024 Microsoft.All rights reserved.

©2024 GRAS Group, Inc.RSS