不显示.net对象的属性和方法

Stu*_*PhD 7 .net c# matlab .net-assembly matlab-deployment

我有.NET程序集文件,我需要它在MATLAB中工作.(该库是用C#创建的,我有相应的源代码)

文档之后,我发现以下命令将在MATLAB中加载程序集并使其类可用于"在MATLAB中".但它似乎没有起作用.我用它来加载文件:

  color = NET.addAssembly('c:\path\to\file\EvolutionMapsClassLib.dll');
Run Code Online (Sandbox Code Playgroud)

加载很好,我在工作区中看到一个1x1 .NET程序集对象.当我输入时,color我得到以下结果:

  color = 

    NET.Assembly handle
    Package: NET

  Properties for class NET.Assembly:

      AssemblyHandle
      Classes
      Structures
      Enums
      GenericTypes
      Interfaces
      Delegates
Run Code Online (Sandbox Code Playgroud)

所以显然它已经正确加载,而且打字color.Classes提供以下内容:

  >> 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'
Run Code Online (Sandbox Code Playgroud)

这似乎运作良好,但根据在线帮助,为了与这些类进行交互,我需要知道方法和属性.

这是我遇到问题的地方,既不是properties也不行methods.我尝试了每个变体来获取属性或方法列表但我不断收到此错误:

  >> 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.
Run Code Online (Sandbox Code Playgroud)

情况也是如此methods,我一直收到这个错误:

  >> methods color

  No methods for class color or no class color.
Run Code Online (Sandbox Code Playgroud)

当我打开此程序集的源代码时,它会显示所有方法和属性,如此屏幕截图所示.

那么如何在不显示属性或方法的情况下使.NET程序集工作呢?

谢谢

Amr*_*mro 5

NET.addAssembly函数加载.NET程序集并使其在MATLAB中可用.返回的变量实际上是"元对象"含有信息有关的类,枚举,结构等.包含在所述组件上.

如果要处理库所公开的任何类,则必须像往常一样实例化对象(或者如果可用则直接调用静态函数).该文档解释了这个非常好.

例如,请使用以下C#类:

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

首先我们将它编译成.NET程序集,我们在MATLAB中使用它:

> csc.exe /target:library /out:ClassLibraryTest.dll MyClass.cs
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

您现在可以照常检查类的属性和方法:

>> properties(c)
>> methods(c)
>> methodsview ClassLibraryTest.MyClass
Run Code Online (Sandbox Code Playgroud)