0

列挙型を含むWebリファレンスがあります。

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 に答える