【问题标题】:ASP.NET: Shadowing IssuesASP.NET:阴影问题
【发布时间】:2011-04-06 00:44:33
【问题描述】:

我在两个独立的库中有两个类(一个 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 is 被正确返回,它只是被稍后在 JSON 字符串中进行的阴影属性调用覆盖。那么,我的新问题是如何防止阴影属性被序列化?

(此问题已调整范围here

【问题讨论】:

    标签: asp.net inheritance polymorphism shadowing


    【解决方案1】:

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

    例如:

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

    将调用影子版本。

    但是:

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

    实际上会调用基地。

    Here's a nice explanation.

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

    【讨论】:

    • 我正在从 webmethod 参数实例化对象。看我对神秘人回答的评论
    • SomeMethod 如何使用项目?挺有趣的。带有 C# 库的 VB 库进行扩展,然后是 VB AJAX 调用。 :-)
    • 是的,这肯定是一个有趣的项目......但我仍然遇到这个问题。只有在序列化对象以作为 JSON 字符串发回时才会发生这种情况。这真的很令人沮丧。
    • @jason 我敢打赌,序列化 / JSON 库可能是你所看到的罪魁祸首,但当然这对修复没有多大帮助....
    • 是的,我也这么想,但我使用的是内置的序列化程序。查看新问题:stackoverflow.com/questions/5570658/…
    【解决方案2】:

    您是从对基本类型的引用中引用 TotalPrice 吗?

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

    【讨论】:

    • no... 项目正在通过 AJAX 调用的 asmx Web 绑定进行绑定。我的签名看起来像Public SomeMethod(item As DerivedItem) As String
    • SomeMethod 如何使用项目?挺有趣的。带有 C# 库的 VB 库进行扩展,然后是 VB AJAX 调用。 :-)
    【解决方案3】:

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

    【讨论】:

    • 嗯,事情就是这样...我仍然希望在使用基类时对其进行序列化...
    猜你喜欢
    • 1970-01-01
    • 2021-02-19
    • 2012-11-05
    • 1970-01-01
    • 2012-03-07
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多