No Results
Search Tips:
- Please consider misspellings
- Try different search keywords
Apex プロパティ
Apex プロパティは変数と似ていますが、アクセスまたは返される前に、プロパティ値にコードの内容を追加できます。プロパティには、さまざまな使い方があります。まず、変更の前にデータを検証できます。また、他のメンバー変数値の変更など、データが変更される前にアクションを要求できます。また、別のクラスなど、別のソースから取得したデータを表示することもできます。
- プロパティが読み込まれると、get アクセス機構内のコードが実行されます。
- プロパティが新しい値に割り当てられると、set アクセス機構内のコードが実行されます。
get アクセス機構だけを持つプロパティは、参照のみと考えられます。set アクセス機構だけを持つプロパティは、書き込み専用と考えられます。両方のアクセス機構を持つプロパティは読み書き用です。
プロパティを宣言するには、クラスの本文内で次の構文を使用します。
1Public class BasicClass {
2
3 // Property declaration
4 access_modifier return_type property_name {
5 get {
6 //Get accessor code block
7 }
8 set {
9 //Set accessor code block
10 }
11 }
12}たとえば、次のクラスは、prop という名のプロパティを定義します。プロパティは public です。プロパティは integer データ型を返します。
1swfobject.registerObject("clippy.class", "9");public class BasicProperty {
2 public integer prop {
3 get { return prop; }
4 set { prop = value; }
5 }
6}次のコードセグメントは、上記のクラスをコールし、set アクセス機構を実施します。
1BasicProperty bp = new BasicProperty();
2bp.prop = 5; // Calls set accessor
3System.assert(bp.prop == 5); // Calls get accessor次の点に注意してください。
- get アクセス機構の本文は、メソッドの本文に似ています。プロパティ型の値を返します。get アクセス機構を実行することは、変数の値を読み取るのと同じことです。
- get アクセス機構は、リターンステートメント内で終わる必要があります。
- get アクセス機構が定義されているオブジェクトの状態を、get アクセス機構で変更しないことをお勧めします。
- set アクセス機構は、戻り値が void のメソッドに似ています。
- プロパティに値を割り当てると、新しい値を渡す引数と共に、set アクセス機構が呼び出されます。
- set アクセス機構が呼び出されると、システムは、暗黙的な引数をプロパティと同じデータ型の value と呼ばれる setter に渡します。
- プロパティは、interface 上では定義できません。
- Apex プロパティは、C# のプロパティに基づいていますが、次の点が異なります。
- プロパティは、値のストレージを直接提供します。ストレージ値のためにサポーティングメンバーを作成する必要はありません。
- Apex 内に自動プロパティを作成できます。詳細は、「自動プロパティを使用する」を参照してください。
自動プロパティを使用する
プロパティでは、get または set アクセス機構のコードブロック内に追加コードは必要ありません。get および set アクセス機構のコードブロックを空白のままにして、自動プロパティを定義できます。自動プロパティによって、デバッグと保守が簡単な、簡潔なコードを記述できます。読み取り専用、読み書き用、書き込み専用として宣言可能です。次に、3 つの自動プロパティの例を示します。
1swfobject.registerObject("clippy.codeblock-3", "9");public class AutomaticProperty {
2 public integer MyReadOnlyProp { get; }
3 public double MyReadWriteProp { get; set; }
4 public string MyWriteOnlyProp { set; }
5}次のコードセグメントで、これらのプロパティを実行します。
1AutomaticProperty ap = new AutomaticProperty();
2ap.MyReadOnlyProp = 5; // This produces a compile error: not writable
3ap.MyReadWriteProp = 5; // No error
4System.assert(MyWriteOnlyProp == 5); // This produces a compile error: not readable静的プロパティの使用
プロパティを static として宣言すると、そのプロパティのアクセス機構方式は、静的コンテキストで実行されます。これは、そのアクセス機構に、クラスで定義されている非静的メンバー変数へのアクセス権がないことを意味します。次の例では、静的およびインス���ンスプロパティの両方を持つクラスを作成します。
1swfobject.registerObject("clippy.codeblock-5", "9");public class StaticProperty {
2 public static integer StaticMember;
3 public integer NonStaticMember;
4 public static integer MyGoodStaticProp {
5 get{return MyGoodStaticProp;}
6 }
7 // The following produces a system error
8 // public static integer MyBadStaticProp { return NonStaticMember; }
9
10 public integer MyGoodNonStaticProp {
11 get{return NonStaticMember;}
12 }
13}
14次のコードセグメントでは、静的およびインスタンスプロパティをコールします。
1StaticProperty sp = new StaticProperty();
2// The following produces a system error: a static variable cannot be
3// accessed through an object instance
4// sp.MyGoodStaticProp = 5;
5
6// The following does not produce an error
7StaticProperty.MyGoodStaticProp = 5;プロパティアクセス機構でのアクセス修飾子の使用
プロパティアクセス機構は、自身のアクセス修飾子で定義できます。アクセス機構が自身のアスセス修飾子を含む場合、この修飾子は、プロパティのアクセス修飾子より優先されます。個別のアクセス機構のアクセス修飾子は、プロパティ自身のアクセス修飾子より限定的である必要があります。たとえば、プロパティが public として定義されている場合、個別のアクセス機構は、global としては定義できません。クラス定義の例を次に示します。
1swfobject.registerObject("clippy.codeblock-7", "9");global virtual class PropertyVisibility {
2 // X is private for read and public for write
3 public integer X { private get; set; }
4 // Y can be globally read but only written within a class
5 global integer Y { get; public set; }
6 // Z can be read within the class but only subclasses can set it
7 public integer Z { get; protected set; }
8}
9