Properties and methods are not displayed for a .net object
.net, .net-assembly, c#, matlab, matlab-deployment
Solution
The `NET.addAssembly` function loads the .NET assembly and makes it available in MATLAB. The variable returned is actually a "meta object" containing information about the classes, enums, structs, etc.. contained in the assembly.
If you want to work with whatever classes are exposed by the library, you have to instantiate objects as usual (or call static functions directly if available). The documentation explains this very well.
As an example, take the following C# class:
MyClass.cs
using System;
namespace ClassLibraryTest
{
public class MyClass
{
public static double add(double x, double y)
{
return x + y;
}
public double negate(double x)
{
return -x;
}
}
}
First we compile it into an .NET assembly, the we use it in MATLAB:
> csc.exe /target:library /out:ClassLibraryTest.dll MyClass.cs
MATLAB
% load my assembly
info = NET.addAssembly( fullfile(pwd,'ClassLibraryTest.dll') );
% call static method
result = ClassLibraryTest.MyClass.add(1,2)
% instantiate instance of class and call member function
c = ClassLibraryTest.MyClass();
result = c.negate(1)
You can now inspect the properties and methods of the class as usual:
>> properties(c)
>> methods(c)
>> methodsview ClassLibraryTest.MyClass
Problem
I have .NET assembly file and I need for it to work in MATLAB. (The library was created in C# and I have the corresponding source code) Following the documentation, I found out that the following command will load up the assembly in MATLAB and make its classes available for use "in MATLAB". But it does not appear to be working. I used this to load up the file: ``` color = NET.addAssembly('c:\path\to\file\EvolutionMapsClassLib.dll'); ``` It load up fine and I see a 1x1 .NET assembly object in my workspace.. When I type `color` I get the following result: ``` color = NET.Assembly handle Package: NET Properties for class NET.Assembly: AssemblyHandle Classes Structures Enums GenericTypes Interfaces Delegates ``` So apparently it has loaded up properly, furthermore typing `color.Classes` gives the following: ``` >> color.Classes ans = 'EvolutionMaps.EvolutionMap' 'EvolutionMaps.EvolutionMap+EstimationResults' 'EvolutionMaps.PrincipalDirectionEvolutionMap' 'EvolutionMaps.CharacterDimensionsEstemator' 'EvolutionMaps.MapBlob' 'EvolutionMaps.MapsMetric' 'EvolutionMaps.MapsMetric+MapMinimalComparable' 'EvolutionMaps.MapsL2Distance' 'EvolutionMaps.DiagonalEvolutionMap' 'EvolutionMaps.EvolutionMapGenerator' 'EvolutionMaps.HeightEvolutionMap' 'EvolutionMaps.FullnessEvolutionMap' 'EvolutionMaps.YvalEvolutionMap' 'EvolutionMaps.ImageExtractor' 'EvolutionMaps.HorisontalProjectionDistance' 'EvolutionMaps.StrokeWidthEvolutionMap' 'EvolutionMaps.ConnectedComponentsFinder' 'EvolutionMaps.ColorMap' 'EvolutionMaps.ColorMap+GrayColorMap' 'EvolutionMaps.ColorMap+JetColorMap' 'EvolutionMaps.TransitionAvgEvolutionMap' 'EvolutionMaps.PrincipalProjectionEvolutionMap' 'EvolutionMaps.ConnectedComponent' 'EvolutionMaps.WidthEvolutionMap' ``` That appears to be working well, but according to the online help, in order to interact with these classes I need to know the methods and properties. this is where I am having problems, as neither `properties` nor `methods` seem to work. I tried every variation to get the properties or the methods list but I keep getting this error: ``` >> properties color.EvolutionMaps.ColorMap No properties for class color.EvolutionMaps.ColorMap or no class color.EvolutionMaps.ColorMap. >> properties color.Classes.EvolutionMaps.ColorMap No properties for class color.Classes.EvolutionMaps.ColorMap or no class color.Classes.EvolutionMaps.ColorMap. >> properties Classes.EvolutionMaps.ColorMap No properties for class Classes.EvolutionMaps.ColorMap or no class Classes.EvolutionMaps.ColorMap. ``` Same is the case with `methods`, I keep getting this error: ``` >> methods color No methods for class color or no class color. ``` Where as when I open the source code for this assembly it shows all the methods and properties as can be seen from this screenshot. So how can I make the .NET assembly work without it displaying properties or methods? Thank you