You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调试中对象出现多个VgnItm属性的原因排查

为什么对象会出现多个同名VgnItm属性?

这是C#的**成员隐藏(Member Hiding)**机制,加上调试器的显示逻辑共同导致的:

  • 基类VgnItmEstDto定义了类型为VgnItmDto的VgnItm属性。
  • 泛型子类VgnItmEstDto<TVgnItmDto>用new关键字声明了同名的VgnItm属性——这个操作是隐藏基类的同名成员,而非覆盖,基类的VgnItm属性依然存在于子类实例中,只是通过子类实例直接访问时会优先调用new声明的版本。
  • 调试器为了展示完整的对象结构,会分别显示:
    1. 子类自身的VgnItm属性(new声明的,类型为TVgnItmDto)
    2. 从基类继承的VgnItm属性(基类定义的,类型为VgnItmDto)
    3. 若项目中使用了序列化框架(比如代码里引用的Newtonsoft.Json或Nest),调试器可能还会显示序列化过程中生成的关联成员,最终出现三个同名条目。

如果要避免这种情况,建议用**虚属性+重写(virtual/override)**替代成员隐藏,这样基类和子类的属性是同一个成员的不同实现,不会出现多个同名条目:

// 基类修改为虚属性
public class VgnItmEstDto : CreatedBySomeoneDto
{
    // ...其他属性
    public virtual VgnItmDto VgnItm { get; set; }
}

// 子类重写属性
public class VgnItmEstDto<TVgnItmDto> : VgnItmEstDto
    where TVgnItmDto : VgnItmDto
{
    public override TVgnItmDto VgnItm { get; set; }
}

内容的提问来源于stack exchange,提问作者BeniaminoBaggins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 17:13:18