Reputation: 4987
I have a web reference that has an enum in it.
WebService.WebEnum.Member1
WebService.WebEnum.Member2
WebService.WebEnum.Member3
etc.
Is there any way to create another enum based on WebEnum ? I have been pulling hair for hours on this one.
Thanks!
Upvotes: 0
Views: 682
Reputation: 28825
Yes, you can use design-time T4 text templates to generate an enum based on another one.
(You will have to set the assembly name to be appropriate for your WebService enum.)
<#@ 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
}
The GeneratedEnum
type will be created at compile time, and will look like this:
enum GeneratedEnum
{
Member1,
Member2,
Member3,
AdditionalMember1,
AdditionalMember2
}
Upvotes: 2
Reputation: 15579
No. You can't use inheritance on enums.
However, you can achieve something that feels similar by using static member properties for a class (instead of the enum). This class can then be extended via inheritance.
public class WebEnum
{
protected WebEnum(int value)
{
...
}
private static WebEnum _member1 = new WebEnum(1);
public static WebEnum Member1
{
get { return _member1; }
}
}
Then you can extend with
public class OtherWebEnums : WebEnums
{
private static WebEnum _member4 = new WebEnum(4);
public static WebEnum Member4
{
get { return _member4; }
}
}
Disclaimer: In terms of a design, I bet some people would be upset to see it as it probably breaks numerous object oriented design rules... But it should serve purpose...
Upvotes: 5