将自定义类型添加到变量类型int?
我试图将自定义类型的'数量'添加到int变量'_StoredStock',但我在如何做到这一点上没有抛出转换异常的空白。任何帮助,将不胜感激。我已经添加了相关的类,以便您了解我正在尝试做什么。将自定义类型添加到变量类型int?
class DiscreteStockQuantity : StockQuantity
{
private int _Quantity;
public int Quantity
{
get { return _Quantity; }
}
public DiscreteStockQuantity (int quantity)
{
_Quantity = quantity;
}
}
class DiscreteStock : Stock
{
private int _StoredStock;
public int StoredStock
{
get { return _StoredStock; }
}
private int _ShelfStock;
public int ShelfStock
{
get { return _ShelfStock; }
}
private double _WeightPerItem;
public double WeightPerItem
{
get { return _WeightPerItem; }
}
public DiscreteStock(Line line, double weightPerItem) : base(line)
{
_ShelfStock = 0;
_StoredStock = 0;
_WeightPerItem = weightPerItem;
}
public override void AdjustStock(StockQuantity quantity)
{
if (quantity is DiscreteStockQuantity)
{
}
}
abstract class Stock
{
private Line _Line;
public Line Line
{
get { return _Line; }
}
public Stock (Line line)
{
_Line = line;
}
public abstract void AdjustStock(StockQuantity quantity);
public abstract bool Purchase(StockQuantity quantity, out Item item);
public abstract void Restock();
}
这真的,真的感觉就像你在What is the Liskov Substitution Principle?在一个相当主要的方式,这是要给你头疼的道路侵权。在采取我的建议之前,请花点时间看看你是否在上侵犯了它。如果是这样,不要采取我的以下建议,,我建议根据你的意识改造你的代码。
如果你是LSP安全的,但我鼓励使用接口IStockQuantity
。然后你有一个基本的具体的StockQuantity : IStockQuantity
和你的新DiscreteStockQuantity : IStockQuantity
。
......但这真的,真的感觉像一个LSP问题。
方法签名void AdjustStock(StockQuantity quantity)
表示任何StockQuantity
衍生的类可用于调整库存。但您只支持使用DiscreteStockQuantity
实例进行调整。这就是Nex Terren用LSP提示的内容。如果你愿意的话,类型系统应该支持你。
所以:将参数类型更改为DiscreteStockQuantity
。
StockQuantity
在基类方法声明中不能更改为DiscreteStockQuantity
,因为它可能与其他Stock
衍生类不同。
因此:如果该方法从未通过基类调用,则删除基类方法声明。否则,为派生类提供足够的方法来告诉基类库存数量类型。
abstract class Stock<TStockQuantity>
where TStockQuantity : StockQuantity
{
public abstract void AdjustStock(TStockQuantity quantity);
}
class DiscreteStock : Stock<DiscreteStockQuantity>
{
public override void AdjustStock(DiscreteStockQuantity quantity)
{
...
}
}
现在,不再需要执行AdjustStock
中的检查。
接口的替代方法。虽然我更喜欢界面,但似乎回答了他的问题,所以+1。 –
给出'DiscreteStockQuantity'的代码 –
在'if'里面你知道它是DSQ,为什么不直接调用返回int值的方法或调用添加int的方法?另一种选择是重写DSQ –
@RafałCzabajWTF中的'+'运算符? – leppie