只在抽象类的多个子类中的一个子类中添加一个额外的方法

本文关键字:一个 子类 方法 添加 抽象类 | 更新日期: 2023-09-27 18:00:34

我有一个抽象类,但有6个不同的实现。现在,对于其中一个,我想添加一个额外的公共方法,但不想将其添加到抽象类中,因为其他5个实现不需要它。

有没有办法实现这一点?当我添加这个新方法而不在抽象类中时,我遇到了一个错误。

这是代码:

namespace Results.Parser
{
public abstract class Parser<T> where T: ReportItem
    {
        public abstract string GetNodeName();
        public abstract IEnumerable<ReportItem> ParseXml(TextReader stream);
        public abstract List<ReportItem> SumValueOfDuplicateRows(List<T> reportList);
        public virtual bool MeetsCriteria(ReportItem reportItem)
        {
            return reportItem.Value.SafeConvertToDecimal() != 0;
        }
    }
}
public class ElementParser : Parser<ReportItem>
    {
        public override string GetNodeName()
        {
            return "Element";
        }
        public override List<ReportItem> SumRiskValueOfDuplicateRows(List<ReportItem> reportList)
        {
        // do something 
        }
public void SerializeXml(TextReader stream)
        {
        //new method which is not in abstract class
        }
public override IEnumerable<ReportItem> ParseXml(TextReader stream)
        {
        //do something
        }
}
namespace Results.Producer
{
public class RepositoryManager
{
 private void GetResponse(TextReader stream)
   {
     var parser = new ElementParser();
     parser.SerializeXml(stream);
    }
}

只在抽象类的多个子类中的一个子类中添加一个额外的方法

当我添加这个新方法而不在抽象类中时,我遇到了一个错误。

对子类实例的超类引用不能访问未在超类中定义的方法。您需要将引用显式转换为子类引用类型,以便能够从子类访问额外的方法。

Aabstract类,设B为具有额外方法extra的类。设aA类型对B类型实例的引用。要访问B中的额外方法,请执行以下操作:

((B)a).extra();

也就是说,如果只有一个类需要不同的附加行为,那么应该考虑使用组合而不是继承。请参阅这个答案,它解释了著名的鸭子问题,该问题类似于您当前所处的