MATLAB /.不允许在.NET对象上设置.NET互操作属性

本文关键字:NET 设置 互操作 属性 对象 不允许 MATLAB | 更新日期: 2023-09-27 18:08:28

我正在用c#编写一个DLL,旨在使用本机。net互操作从MATLAB R2011a中使用。我遇到了一种情况,我无法设置对象上的一个属性的值。下面是一个简单的例子:

namespace MatlabTest
{
  public class Container
  {
    public int Value { get; set; }
  }
  public class MatlabDll
  {
    public MatlabDll()
    {
      this.Prop = new Container();
    }
    public Container Prop { get; private set; }
  }
  public class MatlabDllChild : MatlabDll
  {
  }
}

现在,我可以从MATLAB中访问类型为MatlabDll的对象的属性:

NET.addAssembly('MatlabTest.dll');
myObj = MatlabTest.MatlabDll();
myObj.Prop.Value = 5;

但是,使用

在类型为MatlabDllChild的对象上设置相同的属性失败
myChild = MatlabTest.MatlabDllChild();
myChild.Prop.Value = 5;

错误信息:

设置MatlabTest的Prop属性。MatlabDllChild'类是不允许的

为什么MATLAB允许我在基类而不是派生类型上设置属性?

MATLAB /.不允许在.NET对象上设置.NET互操作属性

因为它有一个私有setter,而这些是派生类型不可用的

例如:

public class Base
{
   private string baseString = "";
   public string BaseString { get { return baseString; } }
}
public class Child : Base
{
}

没有办法访问集合,这实际上就是你所做的。

如果您需要设置为可用于派生类型,请使用Protected代替。

public Container Prop { get; protected set; }

我测试了你的例子,虽然我不能直接分配属性,使用另一个(引用)对象工作得很好:

myChild = MatlabTest.MatlabDllChild();
tmpObj = myChild.Prop;
tmpObj.Value = 5;
disp( myChild.Prop.Value )

也许这是MATLAB .NET接口中的错误/限制…