MakeByRefType Method
Collapse the table of content
Expand the table of content

Type.MakeByRefType Method ()


Returns a Type object that represents the current type when passed as a ref parameter (ByRef parameter in Visual Basic).

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)

public virtual Type MakeByRefType()

Return Value

Type: System.Type

A Type object that represents the current type when passed as a ref parameter (ByRef parameter in Visual Basic).

Exception Condition

The invoked method is not supported in the base class.


The current type is TypedReference.


The current type is a ByReftype. That is, Type.IsByRef returns true.

The MakeByRefType method provides a way to generate ref types (ByRef in Visual Basic) for parameter lists.

Using the syntax of Microsoft intermediate language (MSIL), if the current Type object represents Int32, this method returns a Type object representing Int32&.

The following code example creates array, ref (ByRef in Visual Basic), and pointer types for the Test class.

using System;
using System.Reflection;

public class Example
    public static void Main()
        // Create a Type object that represents a one-dimensional
        // array of Example objects.
        Type t = typeof(Example).MakeArrayType();
        Console.WriteLine("\r\nArray of Example: {0}", t);

        // Create a Type object that represents a two-dimensional
        // array of Example objects.
        t = typeof(Example).MakeArrayType(2);
        Console.WriteLine("\r\nTwo-dimensional array of Example: {0}", t);

        // Demonstrate an exception when an invalid array rank is
        // specified.
            t = typeof(Example).MakeArrayType(-1);
        catch(Exception ex)
            Console.WriteLine("\r\n{0}", ex);

        // Create a Type object that represents a ByRef parameter
        // of type Example.
        t = typeof(Example).MakeByRefType();
        Console.WriteLine("\r\nByRef Example: {0}", t);

        // Get a Type object representing the Example class, a
        // MethodInfo representing the "Test" method, a ParameterInfo
        // representing the parameter of type Example, and finally
        // a Type object representing the type of this ByRef parameter.
        // Compare this Type object with the Type object created using
        // MakeByRefType.
        Type t2 = typeof(Example);
        MethodInfo mi = t2.GetMethod("Test");
        ParameterInfo pi = mi.GetParameters()[0];
        Type pt = pi.ParameterType;
        Console.WriteLine("Are the ByRef types equal? {0}", (t == pt));

        // Create a Type object that represents a pointer to an
        // Example object.
        t = typeof(Example).MakePointerType();
        Console.WriteLine("\r\nPointer to Example: {0}", t);

    // A sample method with a ByRef parameter.
    public void Test(ref Example e)

/* This example produces output similar to the following:

Array of Example: Example[]

Two-dimensional array of Example: Example[,]

System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.RuntimeType.MakeArrayType(Int32 rank) in c:\vbl\ndp\clr\src\BCL\System\RtType.cs:line 2999
   at Example.Main()

ByRef Example: Example&
Are the ByRef types equal? True

Pointer to Example: Example*


Universal Windows Platform
Available since 4.5
.NET Framework
Available since 2.0
Portable Class Library
Supported in: portable .NET platforms
Available since 2.0
Windows Phone Silverlight
Available since 7.0
Windows Phone
Available since 8.1
Return to top
© 2015 Microsoft