如何在MATLAB 2013b中创建自定义设置器方法?

吉拉迪

参加以下课程

classdef MyClass
    properties (Access = public)
        MyProperty;
    end

    methods
        function this = MyClass()
            % initialize the class
            this.MyProperty = [];
            this.LoadProperty(2,2);
        end

        function p = GetProperty(this)
            p = this.MyProperty;
        end

        function this = LoadProperty(this, m, n)
            % loads the property
            this.MyProperty = zeros(m, n);
        end
    end
end

然后您致电:

obj = MyClass();
obj.GetProperty()

它将返回[]-这是MyProperty在构造方法中分配的第一个值

LoadProperty方法充当设置器,但不设置任何内容。我如何为它创建一个二传手MyProperty我来自C#背景,那里很简单。->解决(见下文)

我怀疑这是引用和对象的问题,因为MATLAB始终将对象本身作为第一个参数发送给类的每个方法,而不是像C#那样仅发送引用。

先感谢您!


编辑:

如果我将行更改this.LoadProperty(2,2);this = this.LoadProperty(2,2);,则可以。

现在,有没有一种方法可以在MATLAB中创建一个void返回方法,该方法仅设置类属性,就像通常在C#,C ++,Java等中所期望的那样?

维尔纳

由于已将其声明为公共,因此可以直接访问它:

classObj = MyClass; 
classObj.MyProperty = 20;   
classObj.MyProperty % ans = 20

但是似乎您想封装它。有几种方法可以做到这一点。假设您具有私有访问权限,如下所示。

classdef MyClass
    properties (Access = private)
        MyProperty;
    end

    methods
        function this = MyClass()
            % initialize the class
            this.MyProperty = [];
            this.LoadProperty(2,2);
        end

        function p = GetProperty(this)
            p = this.MyProperty;
        end

        function this = LoadProperty(this, m, n)
            % loads the property
            this.MyProperty = zeros(m, n);
        end
    end 
end

然后,可以向其添加set方法,如下所示(我通常对函数和变量使用小写字母,对类使用大写字母。可以根据需要将其更改为大写字母):

function this = setProperty(this,value)
   this.MyProperty = value;
end

由于这不是句柄类,因此您将需要按以下方式使用此函数:

myClass = myClass.setProperty(30); % You can also set it to [30 30 30; 20 20 20] if you want, there are no restrictions if you don't explicitly write into your function.

否则,您可以通过以下方式使用句柄类:

classdef MyClass < handle

在这种情况下,您可以通过以下方法直接更改它:

myClass.setProperty(40);

但这也意味着您对此类的任何引用都不会创建新对象,而是该对象的另一个句柄。也就是说,如果您这样做:

myClass2 = myClass;
% and uses myClass2.setProperty:
myClass2.setProperty(40)
myClass.GetProperty % ans = 40!

因此,如果您想避免这种行为(也就是说,当您将类传递给一个函数或另一个变量(也就是按值调用)时想要一个类的副本),但想指定应如何获取和设置方法行为上,Matlab提供了两个内置方法,您可以在分配属性时重载它们。那是:

function out = get.MyProperty(this)
function set.MyProperty(this,value)

通过覆盖这些方法,您将覆盖用户调用时发生的情况

myClass.MyProperty          % calls out = get.MyPropertyGet(this)
myClass.MyProperty = value; % calls set.MyProperty(this,value)

但是您也可以使用句柄类并为您的类创建一个复制函数:

function thisCopy = copy(this)
   nObj = numel(this);
   thisCopy(nObj) = MyClass;
   meta = metaclass(MyClass);
   nProp = numel(meta,'PropertyList');
   for k = 1:nObj
     thisCopy(k) = MyClass; % Force object constructor call
     for curPropIdx=1:nProp
       curProp = meta.PropertyList(curPropIdx);
       if curProp.Dependent
         continue;
      end
      propName = curProp.Name;
      thisCopy(k).(propName) = this(k).(propName);
    end
  end
end

应该get. set.在classdef内部将其指定为(就像您的方法一样)作为公共方法。如果您声明了此方法,并希望将class2其作为的副本class,那么您会这样:

myClass = MyClass;
myClass.setProperty(30);
myClass2 = copy(myClass);
myClass2.setProperty(40); %
myClass.GetProperty % ans = 30

对于MyClass应该更复杂一点,因为它handle从类对象中复制每个(非)属性,并在有类对象数组时工作。有关更多参考,请参见@Amro的答案matlab oop文档

这也是为什么this = this.LoadProperty起作用和this.LoadProperty(2,2)不起作用的解释

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

如何在自定义长时间运行的计时器作业中设置进度

来自分类Dev

如何在Matlab中创建命令别名

来自分类Dev

如何在自定义设置器中添加活动记录验证错误?

来自分类Dev

在MATLAB 2013b并行工具箱中使用SPMD设置时如何在并行工作线程之间分配内存

来自分类Dev

如何在MATLAB中定义自定义颜色快捷方式(例如“ r”,“ g”,“ b”,“ k”等)

来自分类Dev

Dart Polymer:创建时如何在自定义中设置非字符串字段

来自分类Dev

如何在Matlab中设置路径?

来自分类Dev

如何在VS 2013中为HTML尖括号设置自定义颜色?

来自分类Dev

如何在Jersey / Jackson中创建用于设置对象的自定义设置器?

来自分类Dev

在Matlab 2013b中创建多维符号数组

来自分类Dev

如何在Matlab中自定义JIDE网格

来自分类Dev

如何在Sails中自定义控制器中的创建

来自分类Dev

EditorConfig-如何在自定义分析器中访问editorconfig规则设置

来自分类Dev

如何在自定义长时间运行的计时器作业中设置进度

来自分类Dev

如何在Matlab中创建正弦模式?

来自分类Dev

如何在Visio 2013中为快捷方式设置自己的自定义键?

来自分类Dev

如何在Matlab中创建命令别名

来自分类Dev

在MATLAB 2013b并行工具箱中使用SPMD设置时如何在并行工作线程之间分配内存

来自分类Dev

如何在Ember中创建自定义枚举器?

来自分类Dev

如何在MATLAB中创建通用结构?

来自分类Dev

如何在Matlab中为创建数组

来自分类Dev

如何在Matlab编程中设置限制

来自分类Dev

如何在Matlab中设置路径?

来自分类Dev

如何在MATLAB中动态创建变量

来自分类Dev

如何在VS 2013中为HTML尖括号设置自定义颜色?

来自分类Dev

在Matlab 2013b中创建多维符号数组

来自分类Dev

如何在Sails中自定义控制器中的创建

来自分类Dev

如何在Robot Framework中创建自定义测试用例设置

来自分类Dev

如何在 Leaflet 中创建自定义设置控件

Related 相关文章

  1. 1

    如何在自定义长时间运行的计时器作业中设置进度

  2. 2

    如何在Matlab中创建命令别名

  3. 3

    如何在自定义设置器中添加活动记录验证错误?

  4. 4

    在MATLAB 2013b并行工具箱中使用SPMD设置时如何在并行工作线程之间分配内存

  5. 5

    如何在MATLAB中定义自定义颜色快捷方式(例如“ r”,“ g”,“ b”,“ k”等)

  6. 6

    Dart Polymer:创建时如何在自定义中设置非字符串字段

  7. 7

    如何在Matlab中设置路径?

  8. 8

    如何在VS 2013中为HTML尖括号设置自定义颜色?

  9. 9

    如何在Jersey / Jackson中创建用于设置对象的自定义设置器?

  10. 10

    在Matlab 2013b中创建多维符号数组

  11. 11

    如何在Matlab中自定义JIDE网格

  12. 12

    如何在Sails中自定义控制器中的创建

  13. 13

    EditorConfig-如何在自定义分析器中访问editorconfig规则设置

  14. 14

    如何在自定义长时间运行的计时器作业中设置进度

  15. 15

    如何在Matlab中创建正弦模式?

  16. 16

    如何在Visio 2013中为快捷方式设置自己的自定义键?

  17. 17

    如何在Matlab中创建命令别名

  18. 18

    在MATLAB 2013b并行工具箱中使用SPMD设置时如何在并行工作线程之间分配内存

  19. 19

    如何在Ember中创建自定义枚举器?

  20. 20

    如何在MATLAB中创建通用结构?

  21. 21

    如何在Matlab中为创建数组

  22. 22

    如何在Matlab编程中设置限制

  23. 23

    如何在Matlab中设置路径?

  24. 24

    如何在MATLAB中动态创建变量

  25. 25

    如何在VS 2013中为HTML尖括号设置自定义颜色?

  26. 26

    在Matlab 2013b中创建多维符号数组

  27. 27

    如何在Sails中自定义控制器中的创建

  28. 28

    如何在Robot Framework中创建自定义测试用例设置

  29. 29

    如何在 Leaflet 中创建自定义设置控件

热门标签

归档