したがって、次の方法で定義された構造体があります。
public struct Item
{
public string _name { get; set; }
public double _weight
{
get
{
return _weight;
}
set
{
_weight = value;
//Shipping cost is 100% dependent on weight. Recalculate it now.
_shippingCost = 3.25m * (decimal)_weight;
//Retail price is partially dependent on shipping cost and thus on weight as well. Make sure retail price stays up to date.
_retailPrice = 1.7m * _wholesalePrice * _shippingCost;
}
}
public decimal _wholesalePrice
{
get
{
return _wholesalePrice;
}
set
{
//Retail price is partially determined by wholesale price. Make sure retail price stays up to date.
_retailPrice = 1.7m * _wholesalePrice * _shippingCost;
}
}
public int _quantity { get; set; }
public decimal _shippingCost { get; private set; }
public decimal _retailPrice { get; private set; }
public Item(string name, double weight, decimal wholesalePrice, int quantity) : this()
{
_name = name;
_weight = weight;
_wholesalePrice = wholesalePrice;
_quantity = quantity;
}
//More stuff
別のクラスに Item のインスタンスもあります。次のコマンドで weight プロパティを呼び出そうとすると、プログラムがクラッシュします。
currentUIItem._weight = formattedWeight;
説明的なエラーは提供されません。この時点で、 currentUIItem がパラメーターなしのデフォルト コンストラクターで新しく作成されていることに注意してください。さて、ここが奇妙な部分です。重みの set プロパティのカスタム実装を削除し、それを汎用の { get; に置き換えると、設定; }、割り当ては問題なく機能します。
ここで何が起こっているか知っている人はいますか?これは、クラスでうまく機能する構造体の癖ですか?