4


私は現在、Matlabを使用して、使用しているカスタムdotNETdllライブラリをインポートしていAssemblyInfo = NET.addAssembly('c:\myClasses.dll')ます。

リストdisp(AssemblyInfo.Classes)は、ライブラリのカスタムクラスを公開します。

'MyLib.ClassA'  
'MyLib.ClassB'  
'MyLib.ClassA+eResults'  

myVar = MyLib.ClassA;matlab内に.netクラス変数を作成するために使用しています(これは正常に機能します)
が、2番目のクラスにはコンストラクターがないため、myVar = MyLib.ClassB;結果は
No constructor 'MyLib.ClassB' with matching signature found.

MyLib.ClassA+eResults2番目の問題は、.NETクラスのプラス記号(+)
です。これを試してみると、エラーが発生します。myVar = MyLib.ClassA+eResults;
Undefined function or variable 'eResults'.

MyLib.ClassBmatlab内にインスタンスカスタムクラスを作成する方法はありますか?プラス記号とは何ですか?構文エラーなし
でのインスタンスを作成するにはどうすればよいですか?MyLib.ClassA+eResults

4

1 に答える 1

8

クラスのインスタンスを作成するには、そのインスタンスがパブリックであり、パブリックコンストラクターを持っている必要があります。classBに複数のパラメーターを持つカスタムコンストラクターしかない場合は、次のようにインスタンス化できます。

var = MyLib.ClassB(x, y);

2番目の問題の場合、+は、eResultsがClassAのネストされたクラスであることを意味します。直接インスタンス化することはできませんが、ここで説明するリフレクションに基づく回避策があります:ネストされたクラスの操作:

a = NET.addAssembly('c:\myClasses.dll');
t = a.AssemblyHandle.GetType('MyLib.ClassA+eResults');
var = System.Activator.CreateInstance(t);
于 2013-02-07T09:39:18.343 に答える