我有一个带有枚举的网络参考。
WebService.WebEnum.Member1
WebService.WebEnum.Member2
WebService.WebEnum.Member3
等
有没有办法根据WebEnum创建另一个枚举?我已经在这个上拉了几个小时。
谢谢!
答案 0 :(得分: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; }
}
}
免责声明:在设计方面,我敢打赌,有些人会不高兴看到它,因为它可能打破了无数的面向对象设计规则...但它应该成为目的...
答案 1 :(得分:1)
是的,您可以使用design-time T4 text templates根据另一个生成枚举。
(您必须将程序集名称设置为适合您的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
}