我有一个属性接口,以及一个实现该接口的类。我将类的实例强制转换为接口,然后尝试读取属性并且不检索该值。谁能明白为什么?
接口:
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 :(得分: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; }
}