2011-04-06 14 views
0

私は2つの別々のライブラリ(1 VB、1つのC#)に2つのクラスがあります:あなたが見ることができるようDerivedItem.TotalPriceItem.TotalPriceASP.NET:シャドウイングの問題

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の値を取得しようとすると、私はまだベースオブジェクトのTotalPrice値を取得しています。

DerivedItemのプロパティが返されないのはなぜですか?私は実際に問題を発見した

EDIT

!私はAJAXを介して返されるJSON文字列で間違った値を得ています。 TotalPriceが正しく返されていることが判明し、後でJSON文字列で行われるshadowedプロパティ呼び出しによって上書きされているだけです。私の新しい質問は、陰影付きのプロパティがシリアル化されないようにする方法です。

(この質問はhereをrescopedされています)

答えて

0

あなたは基本型への参照からTotalPriceをreferecingていますか?

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

いいえ...アイテムは、AJAX呼び出しからasmx Webバインディングを介してバインドされています。私のsigは 'Public SomeMethod(Item As DerivedItem)As String'のように見えます。 – Jason

+0

SomeMethodはどのように項目を使用していますか?楽しそうだね。 VBライブラリにC#ライブラリを展開してからVB AJAX呼び出しを実行します。 :-) – klabranche

2

どのようにオブジェクトをインスタンス化するかによって異なります。例えば

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

は影のバージョンを呼び出します。しかし

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

が実際にベースを呼び出します。もちろん

Here's a nice explanation.

すべての可能で、私はシャドウイングを避けるならば.... :-)

+0

私はwebmethodパラメータからオブジェクトをインスタンス化しています。ミステリーマンの答えに私のコメントを参照してください – Jason

+0

SomeMethodはどのようにアイテムを使用していますか?楽しそうだね。 VBライブラリにC#ライブラリを展開してからVB AJAX呼び出しを実行します。 :-) – klabranche

+0

ええ、それは確かに楽しいプロジェクトです...しかし、私はまだこの問題を抱えています。 JSON文字列として返すようにオブジェクトをシリアル化するときにのみ起こります。それは本当にイライラしています。 – Jason

0

は、基本クラスのプロパティの作業に<NonSerialized()>属性を設定していますか?

+0

これは基本的なクラスが使用されているときにもシリアル化されています。 – Jason