The following example shows how to use Missing to invoke a method with a default argument. To compile and run this code example, you must first compile the following Visual Basic code as a DLL assembly named Target.dll. Save the code as Target.vb. From the command line, use vbc /t:library Target.vb to compile the assembly.
Imports System
Public Class MissingSample
Public Shared Sub MyMethod(Optional k As Integer = 33)
Console.WriteLine("k = " & k.ToString())
End Sub
End Class
If you compile Target.dll in Visual Studio, by default the project name is used as the name of a namespace that contains the MissingSample class. Either remove the namespace from the Target project, or add a using Target; statement to the C# code (Imports Target in Visual Basic, using namespace Target; in Visual C++).
Note: |
|---|
Visual Basic code is used for Target.dll because C# and Visual C++ do not support optional parameters in managed code. Optional parameters are not part of the
Common Language Specification. Therefore, code that uses optional parameters is not CLS-compliant. For more information, see Writing CLS-Compliant Code.
|
When you compile the Visual Basic and C# versions of this code example, add references to Target.dll. For example, if you are compiling from the command line, use the /r:Target.dll option. The Visual C++ version of the code example already includes a #using statement for Target.dll.
Imports System
Imports System.Reflection
Public Module Example
Sub Main()
' To invoke MyMethod with the default argument value, pass
' Missing.Value for the optional parameter. First, get the
' method.
Dim mi As MethodInfo = _
GetType(MissingSample).GetMethod("MyMethod")
' Second, create an array of parameters to pass to the method.
' In this case, the array contains just one element.
Dim arguments() As Object = { Missing.Value }
' Finally, invoke the method. Specify Nothing for the target
' object, because the method is Shared.
mi.Invoke(Nothing, arguments)
End Sub
End Module
' This code example produces the following output:
'
'k = 33
using System;
using System.Reflection;
class Example
{
static void Main()
{
// To invoke MyMethod with the default argument value, pass
// Missing.Value for the optional parameter.
MethodInfo mi = typeof(MissingSample).GetMethod("MyMethod");
mi.Invoke(null, new Object[] { Missing.Value });
}
}
/* This code example produces the following output:
k = 33
*/
#using "target.dll"
using namespace System;
using namespace System::Reflection;
void main()
{
// To invoke MyMethod with the default argument value, pass
// Missing::Value for the optional parameter.
MethodInfo^ mi = MissingSample::typeid->GetMethod("MyMethod");
mi->Invoke(nullptr, gcnew array<Object^> { Missing::Value });
};
/* This code example produces the following output:
k = 33
*/