在某些情况下,我只希望客户端代码查询对象并阻止对其进行修改,在其他情况下,客户端可以查询和修改它。
我以为我可以通过仅使用查询方法返回接口类型中的对象来控制它,但是客户端代码仍然可以将其转换为" editable"界面,所以它并没有真正阻止任何事情。
例如:
interface IProductDescription //Read-only interface
{
string Name {get;}
double CalculatePrice();
}
interface IProduct : IProductDescription //Editable interface
{
string Name {get; set;}
void ChangePrice(double newPrice);
}
class ProductX : IProduct
{
public string Name { get; set; }
public double CalculatePrice()
{
//Do some business code and return a price
}
public void ChangePrice(double newPrice)
{
//update product price
}
}
客户代码:
IProductDescription product = myInventory.GetProductDescription("X");
((IProduct)product).ChangePrice(999);
现在的问题是,即使我将客户端代码的对象返回到IProductDescription类型,它也不能按原样调用ChangePrice方法,但是很容易将它转换为IProduct类型然后调用ChangePrice。
我怎么能实现这个目标? 或者我太偏执了,我应该让方法可以访问客户端代码和"告诉+希望"该方法仅在允许的情况下使用?,但这对我来说似乎不太好......