Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

プロパティ の set メソッド

プロパティ アクセス メソッドの概要

プロパティ アクセス メソッドの概要は、プロパティ アクセス メソッドを参照してください。

プロパティの set メソッドの構文

MATLAB® はプロパティに値が代入されるたびにプロパティの set メソッドを呼び出します。

メモ

プロパティ アクセス メソッドを直接呼び出すことはできません。MATLAB は、プロパティ値にアクセスするときにこれらのメソッドを呼び出します。

プロパティの set メソッドは、次の構文をもちます。ここで、PropertyName はプロパティの名前です。

値クラスの場合:

methods 
   function obj = set.PropertyName(obj,value) 
      ...
end
  • obj — 値が代入されるプロパティをもつオブジェクト

  • value — プロパティに代入される新しい値。

値クラスの関数 set は、変更されたオブジェクトを呼び出し元の関数に返さなければなりません。ハンドル クラスは、変更されたオブジェクトを返す必要はありません。

ハンドル クラスの場合:

methods 
   function set.PropertyName(obj,value) 
      ...
end

プロパティの set メソッドで既定のメソッド属性を使用します。set メソッドを定義している methods ブロックは属性を指定できません。

プロパティに設定する値の検証

プロパティの set メソッドを使用して、プロパティに代入される値を検証します。プロパティの set メソッドは、新しいプロパティ値の保存に必要な動作の前に、入力値のエラー チェックのようなアクションを実行できます。

classdef MyClass
   properties
      Prop1
   end
   methods
      function obj = set.Prop1(obj,value)
         if (value > 0)
            obj.Prop1 = value;
         else
            error('Property value must be positive')
         end
      end
   end
end

プロパティの set メソッドの例は、プロパティ値を特定値に制限を参照してください。

set メソッドを呼び出す場合

プロパティの set メソッドが存在する場合、MATLAB は値がそのプロパティに代入されるたびにメソッドを呼び出します。ただし、次の場合にはプロパティの set メソッドは呼び出されません。

  • プロパティ自体の set メソッドからプロパティに値を代入する場合。これは、set メソッドの再帰呼び出しを防ぐためです。ただし、set メソッドによって呼び出された関数から行われるプロパティの代入では、set メソッドが呼び出されます。

  • オブジェクトの初期化中、オブジェクト コンストラクター関数を呼び出す前に、MATLAB がプロパティに既定値を代入する場合。

  • MATLAB が値オブジェクト (つまり、handle でない任意のオブジェクト) をコピーする場合、MATLAB は、あるオブジェクトから別のオブジェクトにプロパティ値をコピーするときに set または get メソッドを呼び出しません。

  • プロパティの AbortSet 属性が true のときに、現在値と同じプロパティ値を代入する場合。この属性の詳細については、プロパティ値が変化しない場合の代入を参照してください。

コンストラクターでのプロパティ値の設定

コンストラクターでプロパティ値を設定すると、プロパティ set メソッドが呼び出されます。たとえば、PropertySetMethod クラスは Prop1 プロパティのプロパティ set メソッドを定義します。

classdef PropertySetMethod
   
   properties
      Prop1 = "Default String"
   end
   
   methods
      function obj = PropertySetMethod( str )
         if nargin > 0
            obj.Prop1 = str;
         end
      end
      
      function obj = set.Prop1(obj,str)
         obj.Prop1 = str;
         fprintf( 'set.Prop1 method called. Prop1 = %s\n', obj.Prop1 );
      end
   end
end

入力引数なしでクラス コンストラクターを呼び出すと、MATLAB は set.Prop1 メソッドを呼び出しません。

>> o = PropertySetMethod
o = 

  PropertySetMethod with properties:

    Prop1: "Default String"

コンストラクターでプロパティ値を設定すると、プロパティ set メソッドが呼び出されます。

>> o = PropertySetMethod("New string")
set.Prop1 method called. Prop1 = New string

o = 

  PropertySetMethod with properties:

    Prop1: "New string"

オブジェクトを別の変数にコピーすると、代入の右辺のオブジェクトでプロパティに既定以外の値が使われていても、MATLAB はプロパティ set メソッドを呼び出しません。

a = o;
a.Prop1
a.Prop1

ans = 

    "New String"

関連するトピック