ASP.NET:影子问题

时间:2011-04-06 00:44:34

标签: asp.net inheritance polymorphism shadowing

我在两个独立的库中有两个类(一个VB,一个C#):

Public Class Item
    ...
    Public Overridable ReadOnly Property TotalPrice() As String
    Get
        Return FormatCurrency(Price + SelectedOptionsTotal())
    End Get
End Property
End Class

public class DerivedItem : Item {
    ...
   public new Decimal TotalPrice
    {
        get { return Price + OptionsPrice; }
    }
}

如您所见,DerivedItem.TotalPrice会影响Item.TotalPrice属性。但是,在尝试检索DerivedItem.TotalPrice值时,我仍然会获得基础对象的TotalPrice值。

为什么没有返回DerivedItem的属性?

修改

我实际上发现了这个问题!我在通过AJAX返回的JSON字符串中得到错误的值。事实证明TotalPrice 正确地返回,它只是被稍后在JSON字符串中进行的阴影属性调用覆盖。那么,我的新问题是如何防止被遮蔽的属性被序列化?

(此问题已重新调整here

3 个答案:

答案 0 :(得分:2)

这可能取决于您如何实例化对象。

例如:

DerivedItem i = new DerivedItem();
i.TotalPrice();

将调用阴影版本。

然而:

Item i = new DerivedItem();
i.TotalPrice();

实际上会打电话给基地。

Here's a nice explanation.

当然,如果可能的话我会避免遮蔽......: - )

答案 1 :(得分:0)

您是否引用了对基本类型的引用的总价格?

Item item = new DerivedItem;
string s = item.TotalPrice;

答案 2 :(得分:0)

在基类属性上设置<NonSerialized()>属性是否有效?