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允许我在基类而不是派生类型上设置属性?
因为它有一个私有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接口中的错误/限制…