变量如何同时具有两个值?

mic*_*hal 3 .net c# visual-studio-debugging

我想我要写的是我应该先澄清一下,这不是我想要实现的.这是发生在我身上的事情,我正在努力了解它是如何可能的,所以我可以解决它.所以我们走了......

我正在使用C#,.NET 4.0.代码很大,太大了,不能超过这一切,但我试着解释一下发生了什么,希望有一些知识渊博的人会有一些想法.

在我的调用堆栈中,我有一系列通用方法,我注意到虽然值应该只是从一个传递到另一个,但它正在改变.好的,那是我的第一印象.后来我设法隔离了一个有问题的方法,当我停止时,我可以看到对象的同一属性有两个不同的值.

public class Sample : BaseClass, ISomeInterface
{
    [XmlIgnore]
    public new Guid Id { get; set; }
} 
Run Code Online (Sandbox Code Playgroud)

BaseClass和ISomeINterface定义的内容可能很重要

public Guid Id
Run Code Online (Sandbox Code Playgroud)

所以现在,当我停在那个泛型方法并观察Sample类型的变量数据时,i可以扩展其属性并查看Id的第一个值.但是当我观看数据时,它显示出不同的价值.看看你自己.

(这是一张我无法发布的图片,因为声誉可以忽略不计.抱歉)

编辑:我把它推到那里http://picturepush.com/public/7307446

那里的任何人都知道在Watch窗口中获得这些值的方式有何不同?有什么不同?我尝试了许多不同的方法,使用反射进行投射,但总是得到与观察数据时相同的值.具有讽刺意味的是,正确的值,我期望的是另一个,难以捉摸的值.

哦,不,这不是作业;)

luk*_*fer 5

所述new关键字被隐藏的基类构件.

Id属性设置BaseClass为virtual:

public class BaseClass : ISomeInterface
{
    public virtual Guid Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并覆盖它Sample:

public class Sample : BaseClass, ISomeInterface
{
    public override Guid Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)