Main Content

オプションの引数を使用した .NET メソッドの呼び出し

オプション引数のスキップ

この例では、Greeting メソッドを使ってオプション引数で既定の値を使用する方法を示します。

 Greeting の関数シグネチャ

matlabroot/extern/examples/NET/NetSample フォルダーにある C# の例 NetDocOptional.cs をビルドします。アセンブリのビルドの詳細については、MATLAB 例での .NET アプリケーションのビルドを参照してください。

NetDocOptional アセンブリがまだ読み込まれていなければ、読み込みます。

dllPath = fullfile('c:','work','NetDocOptional.dll');
asm = NET.addAssembly(dllPath);
cls = NetDocOptional.MyClass;

この例では、アセンブリを c:\work フォルダーに配置することが仮定されています。関数 fullfile を修正してアセンブリへのパスを変更することができます。

既定の値を表示します。

Greeting(cls,0)
ans = 
hello world

str1 の既定の値を使用します。

def = System.Reflection.Missing.Value;
Greeting(cls,0,def,'Mr. Jones')
ans = 
hello Mr. Jones

str2 の既定の値を使用します。パラメーター リストの最後の引数は省略できます。

Greeting(cls,0,'My')
ans = 
My world

オーバーロード メソッドの呼び出し

この例では、オーバーロードされたメソッド calc でオプションの引数を使用する方法を示します。例を実行するには、次の関数シグネチャを使って calc メソッドを Class で定義する独自のアセンブリ Doc を作成し、ビルドしなければなりません。

 calc の関数シグネチャ

アセンブリを読み込んで cls を作成します。

cls = Doc.Class;

明示的な引数で calc を呼び出します。

calc(cls,3,4)
ans =
     7

パラメーターを省略して既定の値を使おうとすると、MATLAB® ではどのシグネチャを使うかを決められません。

calc(cls)
Cannot choose between the following .NET method signatures due to 
unspecified optional arguments in the call to 'calc':

'Doc.Class.calc(Doc.Class this, 
optional<int32 scalar> x, optional<single scalar> y)' and
'Doc.Class.calc(Doc.Class this, 
optional<int32 scalar> x, optional<double scalar> y)'

You can resolve this ambiguity by specifying enough additional 
optional arguments so that there is only one possible matching 
.NET method.

既定の値を使うには、両方の引数を指定しなければなりません。

def = System.Reflection.Missing.Value;
calc(cls,def,def)
calc(cls,3,def)
calc(cls,def,4)
ans =
    44
ans =
    14
ans =
    37