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

对抽象类虚属性使用new关键字时出现Property Member反射错误如何解决

问题描述

我需要定义仅包含一个virtual属性Property1的抽象基类AbstractBaseClassA,该属性的类型为另一个抽象基类AbstractBaseClassB的List集合。
另有继承自AbstractBaseClassA的类superClassA,我希望将它的Property1实现为继承自AbstractBaseClassB的类superClassB的List集合。
尝试让superClassA的Property1 override AbstractBaseClassA的同名属性时,由于两个属性的List泛型参数为继承关系而非同一类型,无法直接使用override关键字。使用new关键字修饰后,在尝试将XML序列化到superClassA对象时触发报错:

"There was an error reflecting property Member Property1: superClassA.Property1 of type System.Collections.Generic.List'1 hides base class member AbstractBaseClassA.Property1 of type System.Collections.Generic.List'1"
(已提前移除相关XML特性)

原始代码
public abstract class AbstractBaseClassA
{
       [XmlIgnore]
       public virtual List<AbstractBaseClassB> Property1 {get; set;}
}

public abstract class AbstractBaseClassB
{
    public string simpleProperty1111 {get; set;}
    /*构造函数*/
    public AbstractBaseClassB(){}
    public AbstractBaseClassB(string prop1)
    {
        simpleProperty1111 = prop1;
    }
}

public class superClassB : AbstractBaseClassB
{   
    public string simplePropety2222 {get; set;}
    /*构造函数*/
    public superClassB() : base(){}
    public superClassB(string prop22222, string prop11111) : base(prop11111)
    {
        simplePropety2222 = prop22222;
    }
    
}

public class superClassA : AbstractBaseClassA
{
    public new List<superClassB> Property1 {get; set;}
} 
解决方案

保留抽象类中属性的virtual修饰、继承类中属性的new关键字,同时将基类虚属性的XmlAttribute替换为[XmlIgnore]即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:24:08