我想在一个类中创建一个TCPIP对象。我有一些问题要弄清楚该怎么做。
首先,我将显示一个工作代码段:
>> %Creating the TCPIP object
>> TCPIP = tcpip('localhost',1000)
TCPIP Object : TCPIP-localhost
Communication Settings
RemotePort: 1000
RemoteHost: localhost
Terminator: 'LF'
NetworkRole: client
Communication State
Status: closed
RecordStatus: off
Read/Write State
TransferStatus: idle
BytesAvailable: 0
ValuesReceived: 0
ValuesSent: 0
>> %Changing Buffersize as example
>> TCPIP.OutputBufferSize = 30000
TCPIP Object : TCPIP-localhost
Communication Settings
RemotePort: 1000
RemoteHost: localhost
Terminator: 'LF'
NetworkRole: client
Communication State
Status: closed
RecordStatus: off
Read/Write State
TransferStatus: idle
BytesAvailable: 0
ValuesReceived: 0
ValuesSent: 0
如您所见,未显示Buffersize更改的命令行输出。我无法正确地看到它,但我尝试解释一下:创建TCPIP对象后,Matlab将创建具有值TCPIP
的变量1x1 tcpip
。如果我双击此值,则可以看到该对象的所有属性,包括outputBuffersize
。
现在,我将在课堂上展示我的第一次实现。我试图在方法内部创建tcpip对象,该方法将变量TCPIP
(如前所述)保存在类属性中。
classdef tcp_test < handle
properties
TCPIP
end
methods
%CONSTRUCTOR
function Obj = tcp_test(~)
ipobject(Obj);
end
%DECONSTRUCTER
function delete(~)
end
%Create TCPIP Object
function ipobject(Obj)
Obj.TCPIP = tcpip('localhost',1000);
Obj.TCPIP.OutputBufferSize = 30000;
end
end
end
该类示例正在处理任何错误输出,但我认识到某些东西似乎无法正常工作。创建类对象“ myTCP = tcp_test”之后,我尝试研究对象“ myTCP.TCPIP”,并意识到它看起来像是空的。实际上,所有必要的属性都已设置,我可以更改它们,只是未显示。
这导致了最初的问题:我想我必须继承tcpip类才能使用该类方法。
由于缺少视觉效果,我仍然觉得自己做错了。
答案 0 :(得分:0)
我认为这只是缺乏对命令窗口中显示内容的理解-它不是对象的所有属性,有时只是子集。如果在命令窗口中键入get( TCPIP )
,将看到所有属性{em>包括 OutputBufferSize
。同样,t = tcp_test; get( t.TCPIP )
将显示相同的属性。
通过在命令窗口中输入edit tcpip
,您可以看到tcpip
类具有以下属性:
properties(Hidden, SetAccess = 'public', GetAccess = 'public')
icinterface
end
它继承自instrument
类,该类不可编辑,并将具有我们无法看到其定义的其他属性。
这里重要的是Hidden
属性。来自docs:
MATLAB不会在命令窗口中显示具有受保护或私有GetAccess的属性的名称和值或其“隐藏”属性为true的属性。
这就是为什么您不能查看工作空间中的属性的原因。但是,您可以自由编辑属性,并使用常规get( TCPIP )
或特定的get
命令查看它们:
outBuffer = get( TCPIP, 'OutputBuffer' );
更简单地通过点索引完成
outBuffer = TCPIP.OutputBuffer;