2017-06-19 7 views
0

Webサービスを使用してJSON形式のデータをダウンロードし、クラスにデシリアライズするアプリケーションを作成しています。サービスはPHPベースです(私は信じています)。インラインカプセル化が動作を停止しました

最近、Webサービスで、クラス宣言に予期しない結果が生じた更新がありました。 最近まで私は、クラス変数の1

public string consent_id { get { return consent_id.ToUpper(); } set { consent_id = value; } } 

ために、このラインを使用していると、それは一見きれいに取り組んできました。しかし、彼らのサービスの更新以来。これは、スタックオーバーフロー例外を発生させてきたと私はそれが最初の行を再帰的に設定されたカプセル化を呼び出して開始しているように感じている

string Consent_id; 
public string consent_id { get { return Consent_id.ToUpper(); } set { Consent_id = value; } } 

にコードを変更しなければなりませんでした。

誰もが最初のものが動作を停止した理由を知っていますか?スタックオーバーフローの例外をスローする実際の理由は? Setterをインラインに設定せずにGetterを設定する方法はありますか?変更されたGetterが必要なすべてをカプセル化しないでください。

ありがとうございました

+0

'return consent_id.ToUpper();'を呼び出すと、最初の行でgetterを再帰的に呼び出します。したがって、この場合に提出されたバッキングを使用することは良い習慣です。そしてセッター本体を設定しないとゲッター本体を設定できません –

+0

@GeorgeAlexandriaテストでは、ToUpper()を取り出して変更しませんでした。それは例外をスローするセッターだった。 – Seige

+0

最初の例または2番目の例をバッキングフィールドでテストしましたか? –

答えて

1

最初のオプションは決して役に立たなかったでしょう。

スタックオーバーフローの例外がスローされます。スタック領域を使い果たすまで、ゲッターではゲッターを呼び出し、ゲッターを呼び出すなどです。

+0

インラインで行う別の方法はありますか?私は他のものなしで1つを置くことができるように思われる。私は、セッターが自分自身を内部から呼び出さないと思った。毎日新しいこと。 – Seige

+0

@Seigeオートプロパティを使用したくない場合は、値がフィールド、別のプロパティ、その他の場所にあるかどうかに関係なく*どこかに格納する必要があります。暗黙のフィールドを持つ唯一の方法は、自動プロパティです。 – Servy

+0

自動プロパティでは、完全なデフォルトのカプセル化と同じではありませんが、省略形ですか?それとも内部的に何か違うことをしていますか?私はsetterのデフォルトコードを置くことはauto-propertyと同じだと思っていたでしょう。したがって、私のコード。 – Seige

関連する問題