Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

初始化属性并设置一次性计算

此示例说明如何编写代码以初始化并设置 System object™。

在此示例中,通过打开相应文件以使 System object 写入该文件来分配文件资源。您可以在设置时一次性执行这些初始化任务,而不是在每次运行对象时执行。

定义要初始化的公共属性

在此示例中,您会定义公共的 Filename 属性,并将该属性的值指定为不可调的字符向量 default.bin。调用 setup 方法之后,用户便无法更改不可调属性。

properties (Nontunable)
  Filename = "default.bin"
end

定义要初始化的私有属性

用户无法直接访问私有属性,而只能通过 System object 的方法来访问。在此示例中,您将 pFileID 属性定义为私有属性。此外,还将此属性定义为隐藏属性,以指示它是一个内部属性,从不会对用户显示。

properties (Hidden,Access = private)
  pFileID;
end

定义设置

您可以使用 setupImpl 方法来执行设置和初始化任务。您应在 setupImpl 方法中包含只想一次性执行的代码。当您首次运行对象时,setupImpl 方法将被调用一次。在此示例中,您通过打开文件写入二进制数据来分配文件资源。

methods
  function setupImpl(obj)
    obj.pFileID = fopen(obj.Filename,"wb");
    if obj.pFileID < 0
       error("Opening the file failed");
    end
  end
end

虽然不属于设置过程,但您应在您的代码使用完这些文件后关闭它们。您可使用 releaseImpl 方法来释放资源。

包含初始化和设置过程的完整类定义文件

classdef MyFile < matlab.System
% MyFile write numbers to a file

    % These properties are nontunable. They cannot be changed
    % after the setup method has been called or the object
    % is running.
    properties (Nontunable)
        Filename = "default.bin" % the name of the file to create
    end

    % These properties are private. Customers can only access
    % these properties through methods on this object
    properties (Hidden,Access = private)
        pFileID; % The identifier of the file to open
    end

    methods (Access = protected)
        % In setup allocate any resources, which in this case
        % means opening the file.
        function setupImpl(obj)
            obj.pFileID = fopen(obj.Filename,'wb');
            if obj.pFileID < 0
                error("Opening the file failed");
            end
        end

        % This System object writes the input to the file.
        function stepImpl(obj,data)
            fwrite(obj.pFileID,data);
        end

        % Use release to close the file to prevent the
        % file handle from being left open.
        function releaseImpl(obj)
            fclose(obj.pFileID);
        end
    end
end

另请参阅

| | |

相关主题