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

标签 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 程序集在不显示属性或方法的情况下工作呢?

谢谢

最佳答案

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

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

例如,采用以下 C# 类:

我的类.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

关于c# - 不显示 .net 对象的属性和方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21941379/

相关文章:

c# - 使用参数 Func<T> 重载方法

c# - 连接表时 Linq Lambda 连接中断

c# - IoC 工厂 : Pros and contras for Interface versus Delegates

matlab - 在 MATLAB 中使用 ginput 忽略双击

python - Numpy 数组,数据必须是一维的

workspace - matlab "from workspace" block 有错误

c# - Linq-to-Sql SubmitChanges 不更新字段......为什么?

c# - 在 .Net 2.0 中使用可空类型时,有什么我应该担心的吗?

c# - 查询返回匿名类型列表,需要值列表

c# - c#中数值递增的问题