我如何创建一个属性在类,直接处理到另一个类对象
23日视图(30天)
显示旧的评论
目前我有两类,一个类包含一个结构化的定义,和另一个类,应该符合这个定义。myDefinition类加载数据文件的定义。
这是classdef和一些示例属性定义类:
classdefmyDefinition
属性(常量)
lengthMin = 8;
lenthMax = 64;
scaleDefault = [1];
结束
属性(GetAccess =公共SetAccess =不可变)
类型;
definitionFile;
地图;
元素= {};
结束
方法
函数obj = myDefinition (thistype filenameDefinition)
elementTable = readtable (filenameDefinition);
%遍历元素……
结束
结束
结束
函数是真的不重要,但是对于一个概述,myDefinition的构造函数中读取指定文件路径的字符串或字符数组filenameDefintion(这是一个csv文件),与readtable读取它,循环遍历行创建元素。
然后我有一个类必须遵循的一个定义myDefinition类。
classdefmyDefinedObject
属性(访问=私人)
mindatabits = 0;
maxdatabits = 64;
结束
属性(SetAccess =不可变,GetAccess =公共)
mydef;
类型;
名称;
一个;
x;
结束
方法
函数obj = myDefinedObject (num thisDefinition,数据)
如果isa (thisDefinition“myDefinition”)
obj。mydef = thisDefinition;
其他的
obj。mydef = [];
警告(“没有提供有效的定义文件”);
结束
%根据输入数量,名称和其他属性
%的定义,然后分析数据基于属性
%定义的查找
结束
结束
结束
我有其他方法在myDefinedObject以外的构造函数,关键是其中的一些方法需要存储在mydef的定义。确定需要做什么。这就是为什么我现在mydef myDefinedObject类的内部属性。
在一个典型的运行我的程序,我有一个或两个对象
myDefinition
(可以是一个非常大的对象,内存明智)但可能有几十个的对象
myDefinedObject
。所以,理想情况下,mydef来说实际上是一种处理myDefinition对象,而不是对象本身的一个副本。
我知道我可以处理类
classdefmyDefinitionHandle <处理
属性(setAccess =不可变)
能延期的;
结束
函数obj = myDefinitionHandle (thisDefinition)
如果isa (thisDefinition“myDefinition”)
obj.def = thisDefinition;
其他的
obj.def = [];
警告(“没有提供有效的定义文件”);
结束
结束
结束
然后改变
myDefinedObject
检查一个
myDefinitionHandle
从而有效地定义一个句柄。
然而,现在处理一层当试图访问它在我的方法与我只是存储在每个定义本身
myDefinedObject
对象。例如,我有一个方法来检查obj。一个基于obj是正确的。类型值和定义是什么类型的定义:
函数obj =遵守(obj)
如果strlength (obj.a) > obj.mydef.def.elements {obj.type} .max
obj。一个= obj.a (1: obj.mydef.def.elements {obj.type} .max);
结束
结束
(注意:遵守从集被称为是一个方法,这是一个非常简化的例子)
我就会更喜欢打电话
obj.mydef.elements {obj.type} .max
而不是
obj.mydef.def.elements {obj.type} .max
班上的额外. def对象层真的无用武之地。
这些类结构有一个更好的方法我可以这样吗
mydef
直接点
thisDefinition
对象在构造函数中传递?
3评论
克里斯
2023年1月17日
编辑:克里斯
2023年1月17日
这样的工作吗?这样我认为你必须设置在myDefinedObject和myDefinition对象必须存在(所以,将它传递给构造函数或setter)。手柄只设置一次,如果是myDefinition对象的变化,obj.mydef价值。元素指出仍然存在。
obj.mydef。= @ ()myDefinitionObj.elements元素
一些背景知识,以防你没有看到它:
https://undocumentedmatlab.com/articles/handle-object-as-default-class-property-value
更多的答案(2)
克里斯
2023年1月18日
编辑:克里斯
2023年1月18日
@Captain Karnage
像这样吗?
mydef = myDefinition;
mydef, a = myDefinedObject ([] []);
谁mydef一
a.type
a.type ()