Type.IsByRef プロパティ

Type が参照渡しかどうかを示す値を取得します。

Public ReadOnly Property IsByRef As Boolean
[C#]
public bool IsByRef {get;}
[C++]
public: __property bool get_IsByRef();
[JScript]
public function get IsByRef() : Boolean;

プロパティ値

Type が参照渡しである場合は true 。それ以外の場合は false

解説

実際の型を取得するには、参照渡しされた型を逆参照してから、その型に対して GetElementType を呼び出します。

使用例

[Visual Basic, C#, C++] IsByRef プロパティを使用して、指定した型が参照渡しされるかどうかをチェックする例を次に示します。この例では、 HasElementTypeImpl メソッドをオーバーライドした MyTypeDelegator クラスを定義します。メインのクラスは、 HasElementType プロパティをチェックして、要素の型を表示します。

 
Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic
Public Class MyTypeDelegator
    Inherits TypeDelegator
    Public myElementType As String = Nothing
    Private myType As Type = Nothing
    Public Sub New(ByVal myType As Type)
        MyBase.New(myType)
        Me.myType = myType
    End Sub 'New
    ' Override Type.HasElementTypeImpl().
    Protected Overrides Function HasElementTypeImpl() As Boolean
        ' Determine whether the type is an array.
        If myType.IsArray Then
            myElementType = "array"
            Return True
        End If
        ' Determine whether the type is a reference.
        If myType.IsByRef Then
            myElementType = "reference"
            Return True
        End If
        ' Determine whether the type is a pointer.
        If myType.IsPointer Then
            myElementType = "pointer"
            Return True
        End If
        ' The type is not a reference, array, or pointer type.
        Return False
    End Function 'HasElementTypeImpl
End Class 'MyTypeDelegator
Public Class Type_HasElementTypeImpl
    Public Shared Sub Main()
        Try
            Dim myInt As Integer = 0
            Dim myArray(4) As Integer
            Dim myType As New MyTypeDelegator(myArray.GetType())
            Console.WriteLine(ControlChars.NewLine + "Determine whether a variable refers to an array or pointer or reference type." + ControlChars.NewLine)
            ' Determine whether myType is an array, pointer, reference type.  
            If myType.HasElementType Then
                Console.WriteLine("The type of myArray is {0}.", myType.myElementType.ToString())
            Else
                Console.WriteLine("myArray is not an array, pointer, or reference type.")
            End If
            myType = New MyTypeDelegator(myInt.GetType())
            ' Determine whether myType is an array, pointer, reference type. 
            If myType.HasElementType Then
                Console.WriteLine("The type of myInt is {0}.", myType.myElementType.ToString())
            Else
                Console.WriteLine("myInt is not an array, pointer, or reference type.")
            End If
        Catch e As Exception
            Console.WriteLine("Exception: {0}", e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'Type_HasElementTypeImpl

[C#] 
using System;
using System.Reflection;
public class MyTypeDelegator : TypeDelegator
{
    public string myElementType = null;
    private Type myType = null ; 
    public MyTypeDelegator(Type myType) : base(myType)
    {
        this.myType = myType;
    }
    // Override Type.HasElementTypeImpl().
    protected override bool HasElementTypeImpl()
    {
        // Determine whether the type is an array.
        if(myType.IsArray)
        {
            myElementType = "array";
            return true;
        }
        // Determine whether the type is a reference.
        if(myType.IsByRef)
        {
            myElementType = "reference";
            return true;
        }
        // Determine whether the type is a pointer.
        if(myType.IsPointer)
        { 
            myElementType = "pointer";
            return true;
        }
        // Return false if the type is not a reference, array, or pointer type.
        return false;
    }  
}
public class Type_HasElementTypeImpl
{
    public static void Main()
    {
        try
        {
            int myInt = 0 ; 
            int[] myArray = new int[5];
            MyTypeDelegator myType = new MyTypeDelegator(myArray.GetType());
            // Determine whether myType is an array, pointer, reference type.  
            Console.WriteLine("\nDetermine whether a variable is an array, pointer, or reference type.\n");
            if( myType.HasElementType)
                Console.WriteLine("The type of myArray is {0}.", myType.myElementType);
            else
                Console.WriteLine("myArray is not an array, pointer, or reference type.");
            myType = new MyTypeDelegator(myInt.GetType());
            // Determine whether myType is an array, pointer, reference type. 
            if( myType.HasElementType)
                Console.WriteLine("The type of myInt is {0}.", myType.myElementType);
            else
                Console.WriteLine("myInt is not an array, pointer, or reference type.");
        }
        catch( Exception e )
        {
            Console.WriteLine("Exception: {0}", e.Message);
        }
    }
}

[C++] 
#using <mscorlib.dll>

using namespace System;
using namespace System::Reflection;
public __gc class MyTypeDelegator : public TypeDelegator {
public:
   String* myElementType;
private:
   Type* myType;
public:
   MyTypeDelegator(Type* myType) : TypeDelegator(myType) {
      this->myType = myType;
   }
   // Override Type::HasElementTypeImpl().
protected:
   bool HasElementTypeImpl() {
      // Determine whether the type is an array.
      if (myType->IsArray) {
         myElementType = S"array";
         return true;
      }
      // Determine whether the type is a reference.
      if (myType->IsByRef) {
         myElementType = S"reference";
         return true;
      }
      // Determine whether the type is a pointer.
      if (myType->IsPointer) {
         myElementType = S"pointer";
         return true;
      }
      // Return false if the type is not a reference, array, or pointer type.
      return false;
   }
};

int main() {
   try {
      int myInt = 0 ;
      Int32 myArray[] = new Int32[5];
      MyTypeDelegator* myType = new MyTypeDelegator(myArray->GetType());
      // Determine whether myType is an array, pointer, reference type.
      Console::WriteLine(S"\nDetermine whether a variable is an array, pointer, or reference type.\n");
      if (myType->HasElementType)
         Console::WriteLine(S"The type of myArray is {0}.", myType->myElementType);
      else
         Console::WriteLine(S"myArray is not an array, pointer, or reference type.");
      myType = new MyTypeDelegator(__box(myInt)->GetType());
      // Determine whether myType is an array, pointer, reference type.
      if (myType->HasElementType)
         Console::WriteLine(S"The type of myInt is {0}.", myType->myElementType);
      else
         Console::WriteLine(S"myInt is not an array, pointer, or reference type.");
   } catch (Exception* e) {
      Console::WriteLine(S"Exception: {0}", e->Message);
   }
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard

参照

Type クラス | Type メンバ | System 名前空間 | IsByRefImpl