как улучшить этот метод, используя полиморфизм+перегрузку, чтобы уменьшить IS (проверку типов)?

Например,

BaseClass MyBase()
{
    public int Add(BaseClass next)
    {
        if (this is InheritedA && next is InheritedA)
            return 1;
        else if (this is InheritedA && next is InheritedB)
            return 2;
        else if (this is InheritedB && next is InheritedA)
            return 3;
        else if (this is InheritedB && next is InheritedB)
            return 4;      
     }
}

, где InheritedAи InheritedB— его унаследованные классы. На самом деле существует больше унаследованных классов, и Addвозвращает разные результаты в зависимости от порядка и типов его операндов.

Я думаю переписать его с использованием полиморфизма и перегрузки, однако это становится довольно сложным, я должен ввести вспомогательный метод для разрешить тип любого конца.

например,

InheritedA myA()
{
    public override int Add(BaseClass next)
    {
        return next.AddTo(this);
    }
}

Теперь я должен поместить AddToв BaseClassи переопределить его также в унаследованном классе.

InheritedA myA()
{
    public override int AddTo(InheritedA next) { return 1; }
    public override int AddTo(InheritedB next) { return 3; }
}

BaseClass myBase()
{
    public abstract int Add(BaseClass next);
    public abstract int AddTo(InheritedA next);
    public abstract int AddTo(InheritedB next);
}

Есть ли лучший способ сделать это?

6
задан Jon Skeet 27 March 2012 в 17:12
поделиться