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

C# 如果方法根据派生类使用不同的类型,如何在基类中编写一个方法?,c#,templates,inheritance,types,enums,C#,Templates,Inheritance,Types,Enums,这个问题听起来比实际情况更复杂。下面我有一个简化的例子。粉红色高光表示两个类之间的差异。如您所见,唯一真正的区别在于所使用的枚举类型。所有其他代码都是相同的。有没有办法使用继承和/或模板在我的整个代码库中只有一个GetTrialType()方法?在这个示例中,我展示了两个派生类(NBACK和COLOR),但实际上有数百个派生自任务类的类。这意味着如果我必须对GetTrialType()方法进行一次更改,那么实际上我必须进行100次更新。我如何防止这种情况(当使用不同类型时) 您可以简单地使用in

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


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

    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);
    }
私有字典试用类型;
受保护的int GetTrialType(int试用版)
{
尝试
{
返回试验类型[试验];
}
捕获(例外情况除外)
{
//你的日志。。。
}
返回0;
}
受保护的无效AddTrialType(int-trial,int-type)
{
添加(试验,类型);
}

您的代码是如何工作的?
trialTypes(试用版)
如何知道返回哪种类型?当两种类型的选项相同时,为什么要给enum指定不同的名称?@Zache:希望了解更多有关您的解决方案的信息。基类是否允许您使用模板类型创建成员变量?它是否允许您创建不在基类中实现但仅在派生类中实现的方法?@nvoigt:trialTypes[trial]只是一个字典,它是派生类的私有成员变量。@Patel:有时它们有不同的选项。有时它们有相同的选项,但值不同。