对抽象类虚属性使用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
相关产品推荐
相关产品推荐

