我正在尝试实现一个泛型函数,假设我们有模式&它是对应的子模式

现在我所做的就是创建了一个模式的Enum
public enum Modes
{
ModeA,
ModeB,
ModeC
}同样,对于SubModes来说,
public enum SubModesA
{
SubModeA1,
SubModeA2,
SubModeA3
}
public enum SubModesB
{
SubModeB1,
SubModeB2
}
public enum SubModesC
{
SubModeC1,
SubModeC2,
SubModeC3
}现在我的问题是,如何实现一个将Mode作为一个输入,Sub Modes作为第二个输入的方法(可以是泛型的),请注意,第二个输入(子模式)必须基于第一个输入,
(例如Public void PerformOperation(Modes mode, SubModes subMode){};
有什么想法吗?
发布于 2014-09-25 16:59:13
对于您的模式,您将无法使用enum来获得此行为。您将需要使用一种机制,该机制涉及对每种模式都有不同的类型,以便每个模式可以映射到方法的不同重载。您可以使用这样的类来完成这一任务:
public class Mode
{
public static readonly ModeA ModeA = new ModeA();
public static readonly ModeB ModeA = new ModeB();
public static readonly ModeC ModeA = new ModeC();
public class ModeA { }
public class ModeB { }
public class ModeC { }
}现在您可以编写这样的方法:
public static void PerformOperation(Mode.ModeA mode, SubModesA subMode)
{
}您可以为每种类型的模式创建方法,每种模式都具有适当的子模式。这意味着调用者现在可以写:
PerformOperation(Mode.ModeA, 第二个参数的唯一有效值是适当子模式的实例。
发布于 2014-09-25 16:51:45
根据您当前的结构,这是不可能的。泛型类型约束在允许您进行约束方面非常有限。实际上,您可以限制类(new),并强制从类或接口派生。
如果您使枚举对象和从ModeA派生的各种SubModesA,以及从Mode派生的ModeA,则可以这样做:
public class MyGenericClass<T,U> where T : Mode
where U : T为了处理这种情况,您可能需要考虑许多其他模式(模板方法、策略)。
https://stackoverflow.com/questions/26043950
复制相似问题