什么会导致属性在接口上失败?

时间:2016-05-25 01:10:49

标签: c# properties interface xamarin-studio

我有一个属性接口,以及一个实现该接口的类。我将类的实例强制转换为接口,然后尝试读取属性并且不检索该值。谁能明白为什么?

接口:

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)?

1 个答案:

答案 0 :(得分: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; }
}