Export (0) Print
Expand All

Type.MakeByRefType Method

Updated: June 2010

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).


The invoked method is not supported in the base class.


The current type is TypedReference.


The current type is a ByRef type. 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&.

Platform Notes

Silverlight for Windows Phone Silverlight for Windows Phone

 MakeByRefType does not throw TypeLoadException when the MakeByRefType method for a byref type is called.

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 Demo(System.Windows.Controls.TextBlock outputBlock)
      // Create a Type object that represents a one-dimensional
      // array of Example objects.
      Type t = typeof(Example).MakeArrayType();
      outputBlock.Text += String.Format("\r\nArray of Example: {0}\n", t);

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

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

      // Create a Type object that represents a ByRef parameter
      // of type Example.
      t = typeof(Example).MakeByRefType();
      outputBlock.Text += String.Format("\r\nByRef Example: {0}\n", 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;
      outputBlock.Text += String.Format("Are the ByRef types equal? {0}\n", (t == pt));

      // Create a Type object that represents a pointer to an
      // Example object.
      t = typeof(Example).MakePointerType();
      outputBlock.Text += String.Format("\r\nPointer to Example: {0}\n", 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.Demo(TextBlock outputBlock)

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

Pointer to Example: Example*



Supported in: 5, 4, 3

Silverlight for Windows Phone

Supported in: Windows Phone OS 7.1, Windows Phone OS 7.0

XNA Framework

Supported in: Xbox 360, Windows Phone OS 7.0

For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.




June 2010

Added missing TypeLoadException exception.

Customer feedback.

Community Additions

© 2014 Microsoft