2016-05-25 16 views
0

私は、プロパティとそのインターフェイスを実装するクラスとのインターフェイスを持っています。クラスのインスタンスをインターフェイスにキャストし、プロパティを読み取ろうとしましたが、値を取得しません。なぜ誰かが見ることができますか?プロパティのプロパティがインターフェイスに失敗する原因は何ですか?

インタフェース:

public interface IFoo 
{ 
    int ObjectId { get; } 
} 

クラス:

public class Bar : IFoo 
{ 
    public int ObjectId { get; set; } 
} 

使用法:

... 
Bar myBar = new Bar() { ObjectId = 5 }; 
IFoo myFoo = myBar as IFoo; 
int myId = myFoo.ObjectId; //Value of myFoo.ObjectId is 5 in Watch, but myId remains at 0 after statement 
... 

これは単純化されていますが、基本的に私がやっています。ウォッチウィンドウでmyFoo.ObjectIdの値を見ることができますが、myIdへの割り当てが失敗します(値は割り当ての前後で0です)。

+0

あなたのコードと間違って何もないです - 唯一の説明は、あなたが上でそれを検査しているのどちらかということです最後の行のブレークポイント(実際に実行される前)、または間違った変数を検査しています。最後に 'Console.WriteLine(myId)'を置くと、値が実際に設定されているのがわかります。 – Rob

答えて

2

手作業による介入または値を変更したステートメントによって、時計のデータを操作した可能性があります。

私は、コンソールアプリケーションでは、あなたのコードに簡単なテストを行なったし、MYIDの値は5

class Program 
{ 
    static void Main(string[] args) 
    { 
     Bar myBar = new Bar() { ObjectId = 5 }; 
     IFoo myFoo = myBar as IFoo; 
     int myId = myFoo.ObjectId; 

     Console.WriteLine(myId); // 5 

     Console.ReadLine(); 
    } 
} 

interface IFoo 
{ 
    int ObjectId { get; } 
} 

class Bar : IFoo 
{ 
    public int ObjectId { get; set; } 
} 
+0

私は自分のコードに戻って、私の例と一致するように変数名を変更しました。スクリーンショットを提供して名前を変更した後、期待どおりに動作するようになりました。問題は、myFooオブジェクトが、私が作業していたクラスのコンストラクタ(this.myFoo = myFoo)のパラメータと同じ名前になっている可能性があると思います。私の問題コードが実行されたときに範囲内にあるべきではありませんでしたが、他の説明は考えられません。ご協力ありがとうございました! – BlueCoder

関連する問題