我有 .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'
这似乎运行良好,但根据联机帮助,为了与这些类进行交互,我需要了解方法和属性。
这是我遇到问题的地方,因为 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.
同样是 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/