2017-04-10 45 views
0

我是新来的C#,Java中我们曾经有过互连像下面枚举:如何将多个枚举之间保持互联在C#

public enum Module 
{ 
    None(SubModule.None), 
    Authentication(SubModule.Login), 
    User(SubModule.User,SubModule.ForgotPassword,SubModule.ResetPassword) 


    private SubModule subModule; 

    public Module(SubModule... submodule) 
    { 

    } 

} 

我想互连连杆我的模块,子模块,我试过在C#中,它给出了编译错误。无论如何,在C#中做同样的事情。

+3

C#中的枚举不像Java中的类那样,所以我不认为有办法。 –

+0

@SelmanGenç是正确的,C#中的枚举类型是[syntatic sugar](http://www.dotnetjunkies.net/csharp/enum-working-with-enumerations/),请阅读[docs](https:// msdn .microsoft.com/en-us/library/sbbt4032.aspx),它可能会帮助你.. –

回答

1

C#枚举类型比Java枚举类型简单得多 - 它们不能有构造函数,方法或成员字段。但是,您可以使用具有代表每个“枚举”的静态实例的类实现类似的功能。

public sealed class Module 
{ 
    public static Module None { get; } = new Module(SubModule.None); 
    public static Module Authentication { get; } = new Module(SubModule.Login); 
    public static Module User { get; } = new Module(SubModule.User, SubModule.ForgotPassword, SubModule.ResetPassword); 

    private SubModule[] _subModules; 
    private Module(params SubModule[] subModules) 
    { 
     _subModules = subModules; 
    } 
} 

该类允许您访问使用基本相同的语法静态Module实例作为一个枚举,而私有构造防止新的实例被创建。

请注意,SubModule可能是一个真正的C#enum,如果这符合您的需要,或者它也可以是一个具有“enum”值的静态属性的类。