MethodAttributes Enumeration
TOC
Collapse the table of content
Expand the table of content

MethodAttributes Enumeration

[ This article is for Windows Phone 8 developers. If you’re developing for Windows 10, see the latest documentation. ]

Specifies flags for method attributes. These flags are defined in the corhdr.h file.

This enumeration has a FlagsAttribute attribute that allows a bitwise combination of its member values.

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

'Declaration
<FlagsAttribute> _
Public Enumeration MethodAttributes

Member nameDescription
AbstractIndicates that the class does not provide an implementation of this method.
AssemblyIndicates that the method is accessible to any class of this assembly.
CheckAccessOnOverrideIndicates that the method can only be overridden when it is also accessible.
FamANDAssemIndicates that the method is accessible to members of this type and its derived types that are in this assembly only.
FamilyIndicates that the method is accessible only to members of this class and its derived classes.
FamORAssemIndicates that the method is accessible to derived classes anywhere, as well as to any class in the assembly.
FinalIndicates that the method cannot be overridden.
HasSecurityIndicates that the method has security associated with it. Reserved flag for runtime use only.
HideBySigIndicates that the method hides by name and signature; otherwise, by name only.
MemberAccessMaskRetrieves accessibility information.
NewSlotIndicates that the method always gets a new slot in the vtable.
PinvokeImplIndicates that the method implementation is forwarded through PInvoke (Platform Invocation Services).
PrivateIndicates that the method is accessible only to the current class.
PrivateScopeIndicates that the member cannot be referenced.
PublicIndicates that the method is accessible to any object for which this object is in scope.
RequireSecObjectIndicates that the method calls another method containing security code. Reserved flag for runtime use only.
ReservedMaskIndicates a reserved flag for runtime use only.
ReuseSlotIndicates that the method will reuse an existing slot in the vtable. This is the default behavior.
RTSpecialNameIndicates that the common language runtime checks the name encoding.
SpecialNameIndicates that the method is special. The name describes how this method is special.
StaticIndicates that the method is defined on the type; otherwise, it is defined per instance.
UnmanagedExportIndicates that the managed method is exported by thunk to unmanaged code.
VirtualIndicates that the method is virtual.
VtableLayoutMaskRetrieves vtable attributes.

The following example displays some of the attributes of an example method, and an attribute of a property accessor.


Imports System.Reflection

Class Example

   Protected Overridable Friend Sub MyMethod(ByVal a As Integer, ByRef b As String)
      b = "in MyMethod"
   End Sub 

   Public ReadOnly Property P() As Integer
      Get
         Return 42
      End Get
   End Property

   Public Shared Sub Demo(ByVal outputBlock As System.Windows.Controls.TextBlock) 

      outputBlock.Text &= "Reflection.MethodBase.Attributes Sample" & vbLf & vbLf

      ' Get the method and its attributes.
      Dim mb As MethodBase = GetType(Example).GetMethod("MyMethod", _
                                 BindingFlags.NonPublic Or BindingFlags.Instance)
      Dim attribs As MethodAttributes = mb.Attributes

      ' Display the method name and signature.
      outputBlock.Text &= "MethodBase.ToString(): " & mb.ToString() & vbLf

      ' Method access is a number, not a flag.
      Dim memberAccess As String = ""
      Select Case attribs And MethodAttributes.MemberAccessMask
         Case MethodAttributes.PrivateScope:
            memberAccess = "PrivateScope - member is not referenceable"
         Case MethodAttributes.Private:
            memberAccess = "Private"
         Case MethodAttributes.FamANDAssem:
            memberAccess = "FamANDAssem - derived types that are also restricted to the assembly" & _
               vbLf & "               This access level cannot be created with Visual Basic." & vbLf         
         Case MethodAttributes.Assembly:
            memberAccess = "Assembly - Friend"
         Case MethodAttributes.Family:
            memberAccess = "Family - Protected"
         Case MethodAttributes.FamORAssem:
            memberAccess = "FamORAssem - Protected Friend"
         Case MethodAttributes.Public:
            memberAccess = "Public"
      End Select

      outputBlock.Text &= "Access level: " & memberAccess & vbLf

      Dim vtable As MethodAttributes = attribs And MethodAttributes.VtableLayoutMask
      If vtable = MethodAttributes.ReuseSlot
         outputBlock.Text &= "Method will reuse an existing slot in the vtable." & vbLf
      Else
         outputBlock.Text &= "Method always gets a new slot in the vtable." & vbLf
      End If

      If (attribs And MethodAttributes.Virtual) <> 0 Then
         outputBlock.Text &= "Method is overridable." & vbLf
      Else
         outputBlock.Text &= "Method cannot be overridden." & vbLf
      End If

      Dim propertyGetter As MethodInfo = _
         GetType(Example).GetProperty("P").GetGetMethod()
      If 0 <> (propertyGetter.Attributes And MethodAttributes.SpecialName) Then
         outputBlock.Text &= vbLf & _
            String.Format("Property accessor '{0}' has a special name." & vbLf, _
            propertyGetter)
      End If
   End Sub 
End Class 

' This code produces output similar to the following:
'
'Reflection.MethodBase.Attributes Sample
'MethodBase.ToString(): Void MyMethod(Int32, System.String ByRef, System.String.ByRef)
'Access level: FamORAssem - Protected Friend
'Method will reuse an existing slot in the vtable.
'Method is overridable.
'
'Property accessor 'Int32 get_P()' has a special name.


Windows Phone OS

Supported in: 8.1, 8.0, 7.1, 7.0

Windows Phone

Show:
© 2017 Microsoft