0

我有一个包含枚举的网络参考。

WebService.WebEnum.Member1
WebService.WebEnum.Member2
WebService.WebEnum.Member3

等等

有没有办法基于 WebEnum 创建另一个枚举?我已经在这个上拉了几个小时的头发。

谢谢!

4

2 回答 2

5

不,你不能在枚举上使用继承。

但是,您可以通过使用类的静态成员属性(而不是枚举)来实现类似的效果。然后可以通过继承扩展这个类。

public class WebEnum
{
     protected WebEnum(int value)
     {
         ...
     }

     private static WebEnum _member1 = new WebEnum(1);

     public static WebEnum Member1
     {
         get { return _member1; }
     }
}

然后你可以扩展

public class OtherWebEnums : WebEnums
{
     private static WebEnum _member4 = new WebEnum(4);

     public static WebEnum Member4
     {
          get { return _member4; }
     }
}

免责声明:就设计而言,我敢打赌有些人会不高兴看到它,因为它可能违反了许多面向对象的设计规则......但它应该服务于目的......

于 2012-05-03T20:03:04.743 回答
1

是的,您可以使用设计时 T4 文本模板来生成基于另一个枚举的枚举。

(您必须将程序集名称设置为适合您的 WebService 枚举。)

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="$(SolutionDir)WebService\bin\Debug\WebService.Dll" #>
<#@ output extension=".cs" #>
enum GeneratedEnum
{
<# foreach(var member in Enum.GetValues(typeof(WebService.WebEnum))){ #>
     <#= member #>,
<# } #>
    AdditionalMember1,
    AdditionalMember2
}

GeneratedEnum类型将在编译时创建,如下所示:

enum GeneratedEnum
{
    Member1,
    Member2,
    Member3,
    AdditionalMember1,
    AdditionalMember2
}
于 2012-05-03T20:29:00.363 回答