Main Content

静态数据

什么是静态数据

静态数据是指类的所有对象共享的数据,您可以在创建类实例后修改这些数据。使用静态数据可定义类实例使用的计数器,或在类的所有对象之间共享的其他数据。与实例数据不同,静态数据不会因对象而异。MATLAB® 提供了几种定义静态数据的方式来满足您的要求。

静态变量

类可以使用持久变量来存储静态数据。您可以定义一个静态方法或局部函数,以在其中创建持久变量。该方法或函数提供对此变量的访问。当您要存储一个或两个变量时,请使用这种编程方式。

保存定义持久变量的类对象不会保存与该类相关联的静态数据。要将静态数据保存在对象中,或者定义更广泛的数据,请使用静态数据对象编程方式 静态数据对象

实现

StoreData 类定义一个静态方法,该方法声明持久变量 Var。通过 setgetVar 方法,可以对持久变量中的数据进行 set 和 get 访问。由于 setgetVar 方法具有公共访问权限,因此您可以以全局方式对存储在持久变量中的数据进行 set 和 get 访问。通过设置方法的 Access 特性来控制对方法的访问权限。

classdef StoreData
   methods (Static)
      function out = setgetVar(data)
         persistent Var;
         if nargin
            Var = data;
         end
         out = Var;
      end
   end
end

通过带输入参量调用 setgetVar 来设置变量值。该方法将输入值赋给持久变量:

StoreData.setgetVar(10);

通过不带输入参量的方式调用 setgetVar 来获取变量值:

a = StoreData.setgetVar
a =     10

通过对 StoreData 类调用 clear 清除持久变量:

clear StoreData
a = StoreData.setgetVar
a =

     []

setgetVar 等方法添加到您需要静态属性行为的任何类中。

静态数据对象

要存储更广泛的数据,请定义具有公共属性的句柄类。将类的对象赋给使用静态数据的类的常量属性。如果您要进行以下操作,这种编程方式非常有用:

  • 添加更多修改数据的属性或方法。

  • 保存数据类的对象并重新加载静态数据。

实现

SharedData 类是句柄类,它允许您从多个句柄变量引用相同的对象数据:

classdef SharedData < handle
   properties 
      Data1
      Data2
   end
end

UseData 类是使用存储在 SharedData 类中的数据的类的桩件。UseData 类将 SharedData 对象的句柄存储在常量属性中。

classdef UseData
   properties (Constant)
      Data = SharedData
   end
   % Class code here
end

Data 属性包含 SharedData 对象的句柄。加载 UseData 类时,MATLAB 会构造 SharedData 对象。所有随后创建的 UseData 类实例都引用同一个 SharedData 对象。

要初始化 SharedData 对象属性,请通过引用常量属性加载 UseData 类。

h = UseData.Data
h = 

  SharedData with properties:

    Data1: []
    Data2: []

使用 SharedData 对象的句柄将数据赋给属性值:

h.Data1 = 'MyData1';
h.Data2 = 'MyData2';

UseData 类的每个实例都引用同一个句柄对象:

a1 = UseData;
a2 = UseData;

使用对象变量引用数据:

a1.Data.Data1
ans =

MyData1

将一个新值赋给 SharedData 对象中的属性:

a1.Data.Data1 = rand(3);

UseData 类的所有新对象和现有对象共享同一个 SharedData 对象。a2 现在包含 rand(3) 数据,这些数据在之前的步骤中赋给了 a1

a2.Data.Data1
ans =

    0.8147    0.9134    0.2785
    0.9058    0.6324    0.5469
    0.1270    0.0975    0.9575

要重新初始化常量属性,请清除 UseData 类的所有实例,然后清除该类:

clear a1 a2
clear UseData

常量数据

要存储不变的常量值,请将数据赋给常量属性。类的所有实例共享该属性的相同值。通过设置属性的 Access 特性,控制对常量属性的访问权限。

更改常量属性值的唯一方法是更改类定义。使用常量属性,如 Java® 中的公共最终静态字段。

另请参阅

|

相关示例

详细信息