同一对象仅在某些情况下可查询,而在其他情况下完全可编辑

时间:2016-02-22 21:24:33

标签: c#

在某些情况下,我只希望客户端代码查询对象并阻止对其进行修改,在其他情况下,客户端可以查询和修改它。

我以为我可以通过仅使用查询方法返回接口类型中的对象来控制它,但是客户端代码仍然可以将其转换为" 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。

我怎么能实现这个目标? 或者我太偏执了,我应该让方法可以访问客户端代码和"告诉+希望"该方法仅在允许的情况下使用?,但这对我来说似乎不太好......

0 个答案:

没有答案