Mono Class Library: System Namespace

System.MethodAccessException Class

Represents the error that occurs when there is an attempt to access a method outside the scope in which access is permitted. [Edit]

See Also: MethodAccessException Members

System.Object
     System.Exception
          System.SystemException
               System.MemberAccessException
                    System.MethodAccessException

[System.Runtime.InteropServices.ComVisible(true)]
public class MethodAccessException : MemberAccessException

Thread Safety

All public static members of this type are safe for multithreaded operations. No instance members are guaranteed to be thread safe.

Remarks

Note: This exception is thrown when the access level of a method in a class library is changed, and one or more assemblies referencing the library have not been recompiled. This exception is also thrown when an attempt to invoke a method via reflection fails because the caller does not have the required permissions.
[Edit]

Example

The following example demonstrates a scenario under which MethodAccessException is thrown.

The following code contains a class with a public method (MyMethod). This class is compiled into a class library.

C# Example
using System;
namespace TestNameSpace 
{
 public class Class1
 {
   public Class1()
   {
     Console.WriteLine ("Constructing with public method.");
   }
   public void MyMethod () 
   {
     Console.WriteLine ("Calling MyMethod.");
   }
 }
}
      

The following code references the class library above, and accesses TestNameSpace.Class1.MyMethod. This code is compiled into an application.

C# Example
using System;
using TestNameSpace;
class AppTest
{
 public static void Main()
 {
   Class1 test = new Class1();
   test.MyMethod();
 }
}
      

The output of the application is

Constructing with public method.
Calling MyMethod.

The code for the class library is changed and recompiled so that TestNameSpace.Class1.MyMethod is no longer public. The following code changes MyMethod from public to private.

C# Example
using System;
namespace TestNameSpace 
{
 public class Class1
 {
   public Class1()
   {
     Console.WriteLine ("Constructing with private method.");
   }
   private void MyMethod () 
   {
     Console.WriteLine ("Calling MyMethod.");
   }
 }
}
      

When the application is executed again without being recompiled, the output is

Unhandled Exception: System.MethodAccessException: TestNameSpace.Class1.MyMethod()
at AppTest.Main()

Requirements

Namespace: System
Assembly: mscorlib (in mscorlib.dll)
Assembly Versions: 1.0.5000.0, 2.0.0.0