2016-05-25 3 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 был назван таким же, как параметр в конструкторе класса I, который работал (this.myFoo = myFoo). Это не должно было быть в области, когда мой код проблемы был выполнен, но я не могу придумать никаких других объяснений. Спасибо за помощь! – BlueCoder

Смежные вопросы