ASP.NET: проблемы с теневым копированием - PullRequest
0 голосов
/ 06 апреля 2011

У меня есть два класса в двух отдельных библиотеках (одна 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 не возвращается?

РЕДАКТИРОВАТЬ

Я действительно обнаружил проблему!Я получаю неправильное значение в строке JSON, возвращаемой через AJAX.Оказывается, что TotalPrice - это , возвращаемый правильно, он просто перезаписывается вызовом свойства shadowed, сделанным позже в строке JSON.Мой новый вопрос - как предотвратить сериализацию свойства shadowed?

(Этот вопрос был переписан здесь )

Ответы [ 3 ]

2 голосов
/ 06 апреля 2011

Это может зависеть от того, как вы создаете объект.

Например:

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

Назовет затененную версию.

Тем не менее:

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

На самом деле вызовет базу.

Вот хорошее объяснение.

Конечно, если это вообще возможно, я бы избегал теней ....: -)

0 голосов
/ 15 апреля 2011

Работает ли установка атрибута <NonSerialized()> в свойстве базового класса?

0 голосов
/ 06 апреля 2011

Вы ссылаетесь на TotalPrice из ссылки на базовый тип?

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