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

时间:2014-02-21 17:39:20

标签: c# .net matlab .net-assembly matlab-deployment

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

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

  color = NET.addAssembly('c:\path\to\file\EvolutionMapsClassLib.dll');

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

  color = 

    NET.Assembly handle
    Package: NET

  Properties for class NET.Assembly:

      AssemblyHandle
      Classes
      Structures
      Enums
      GenericTypes
      Interfaces
      Delegates

显然它已正确加载,而且输入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'

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

这是我遇到问题的地方,因为propertiesmethods似乎都不起作用。 我尝试了每个变体来获取属性或方法列表,但我不断收到此错误:

  >> 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.

methods的情况也一样,我不断收到此错误:

  >> methods color

  No methods for class color or no class color.

当我打开此程序集的源代码时,它会显示从screenshot可以看到的所有方法和属性。

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

谢谢

1 个答案:

答案 0 :(得分:5)

NET.addAssembly函数加载.NET程序集并使其在MATLAB中可用。返回的变量实际上是一个"元对象"包含information关于包含在程序集中的类,枚举,结构等。

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

例如,请使用以下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;
        }
    }
}

首先我们将它编译成.NET程序集,我们在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)

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

>> properties(c)
>> methods(c)
>> methodsview ClassLibraryTest.MyClass