2016-03-22 14 views
-2

私はこの場合absを使うことができますが、私は不思議です。3つの演算子が原因でStackOverflowExceptionが発生する

public float maxThrotle{ 
    set { maxThrotle = value < 0 ? -value : value; //this line causes problem 
    } 
    get { return maxThrotle; } 
} 
+5

設定者がmaxThrotleプロパティを割り当てます。 maxThrotleプロパティを割り当てるセッターを実行します。 maxThrotleプロパティを割り当てるセッターを実行します。 maxThrotleプロパティを割り当てるセッターを実行します。 maxThrotleプロパティを割り当てるセッターを実行します。 maxThrotleプロパティを割り当てるセッターを実行します。 maxThrotleプロパティを割り当てるセッターを実行します。 maxThrotleプロパティを割り当てるセッターを実行します。 maxThrotleプロパティを割り当てるセッターを実行するのは... Kaboom! –

+4

getterはmaxThrotleプロパティを読み取ります。 maxThrotleプロパティを読み取るgetterを実行します。 maxThrotleプロパティを読み取るgetterを実行します。 maxThrotleプロパティを読み取るgetterを実行します。 maxThrotleプロパティを読み取るgetterを実行します。 maxThrotleプロパティを読み取るgetterを実行します。 maxThrotleプロパティを読み取るgetterを実行します。 maxThrotleプロパティを読み取るgetterを実行します。 maxThrotleプロパティを読み取るgetterを実行します。どちらが..カブーム! –

+2

あなたはHansを繰り返しています。老いてくる? ;) –

答えて

2

プロパティセッターからプロパティセッターを呼び出そうとすると、無限ループが発生しています。

次のようにあなたはおそらく、値を格納するプライベートバッキングフィールドを作成したい:

private float maxThrotle; 
public float MaxThrotle { 
    set { maxThrotle = value < 0 ? -value : value; //this line causes problem 
    } 
    get { return maxThrotle; } 
} 

注私は、ほとんどのC#のコーディング標準に従い、大文字を使用するプロパティの名前を変更しました。

(また、スロットのスロットは、ダブル-t-で綴られています)。

+0

ああ、それはとても恥ずかしいです! とにかく、あなたの返事をありがとう。私のプログラミング教師は、C#の最新バージョンでは、追加のプライベート変数を実装する必要はないと言いました...しかし、彼は間違っていたか、彼を誤解しました。 – user3387666

+0

getterとsetterで特別なロジックが必要ない場合は、 'public float MaxThrottle {get;セット; } 'これは' private float _#maxThrottle;と同じです。 public float MaxThrottle {get {return _#maxThrottle; } set {_#maxThrottle = value;} }} '(コンパイラは、それ以外の場合は無効な名前を持つバッキングフィールド' _#maxThrottle'を生成するので、プロパティを除いてアクセスすることはできません)。ただし、カスタムゲッターとセッターを実装する場合は、バッキングフィールドも実装する必要があります。 – CompuChip

関連する問題