何が起こっているかを確認する最も簡単な方法 (IMO) は、これらのプロパティをメソッドに変換することです。
// If we didn't have properties, this is what the two first lines would be. Ick!
private int assignedCount;
private int unassignedCount;
public int GetAssignedCount()
{
return assignedCount;
}
public void SetAssignedCount(int value)
{
assignedCount = value;
}
public int GetUnassignedCount()
{
return unassignedCount;
}
public void SetUnassignedCount(int value)
{
unssignedCount = value;
}
// And here's the read-only TotalCount property translation
public int GetTotalCount()
{
return GetUnassignedCount() + GetTotalCount();
}
これで、内部の再帰GetTotalCount()
が非常に明確になるはずです。メソッドは無条件に自分自身を呼び出すため、最終的にはスタックを爆破します。
自動実装されたプロパティの混合と、プロパティ アクセスがフィールド アクセスのように見えるという事実は、それらが実際には偽装されたメソッドであることを思い出すのを妨げることがあります。上記の翻訳ですべてがより明確になることを願っています。