2016-05-25 62 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

您可能通過手動干預或改變值的語句操作了手錶上的數據。

我做了一個控制檯應用程序代碼和身份識別碼的值快速測試是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

相關問題