如果方法根据派生类使用不同的类型,如何在基类中编写一个方法?

时间:2014-07-14 06:46:11

标签: c# templates inheritance types enums

这个问题听起来比实际上更复杂。我在下面有一个简化的例子。粉红色突出显示两个班级之间的差异。如您所见,唯一真正的区别在于使用的枚举类型。所有其他代码都是相同的。有没有办法使用继承和/或模板在我的整个代码库中只有一个GetTrialType()方法?我在这个例子中显示了两个派生类(NBACK和COLOR),但实际上有几百个派生自Task类的类。这意味着如果我必须对GetTrialType()方法进行一次更改,我实际上必须进行100次更新。如何防止这种情况(使用不同类型时)?

Diff

1 个答案:

答案 0 :(得分:0)

您可以简单地使用int而不是该字典中的枚举。在派生类中,每次向trialTypes添加任何类型时都必须将其强制转换为int,而每次通过调用GetTrialType得到类型时,都必须将其强制转换为枚举类型。在您的Task类中,您可以:

    private Dictionary<int, int> trialTypes;

    protected int GetTrialType(int trial)
    {
        try
        {
            return trialTypes[trial];
        }
        catch (Exception ex)
        {
            // your logging ...
        }

        return 0;
    }

    protected void AddTrialType(int trial, int type)
    {
        trialTypes.Add(trial, type);
    }