2016-07-08 23 views
0

は、このクラスを持っているので、列挙型は

public static string SET_STB_MEDIA_CTRL (MultimediaConstants type, MultimediaConstants action) 
{ 
    return Command.SET_STB_MEDIA_CTRL + "type:" + type + "action:" + action; 
} 

public static class MultimediaConstants 
{ 
    public const string VIDEO = "video"; 
    public const string AUDIO = "audio"; 
    public const string PHOTO = "photo"; 
    public const string ALL = "all"; 
    public const string BACKGROUND_MUSIC = "background_music"; 
    public const string TV = "tv"; 
    public const string ACTION_PLAY = "play"; 
} 

ポイントは、私はこのような何かがしたいということであり、この方法の結果は次のようになります。

SET STB MEDIA CTRL type:tv action:play 

メソッドの呼び出しは次のようになります。

SET_STB_MEDIA_CTRL (MultimediaConstants.TV, MultimediaConstants.ACTION_PLAY); 
+2

あなたは静的クラスのインスタンスを作成することはできませんので、あなたは – Sehnsucht

+1

これらは列挙型をアレントメソッドの引数として、静的クラスのインスタンスを求めることはできません。これらはクラスです。クラスの代わりに 'enum'キーワードを使って列挙型を作成することができます。必要な値を使用することができます。 –

+0

@Sehnsuchtだからこそ、彼はjavaのように、 'Enum of strings'を望んでいます。 –

答えて

3

このような問題にアプローチする方法は、プライベートコンストラクタを持つこと、および値で初期化されているパブリック静的フィールド/プロパティを持っている問題のクラスでありますそのインスタンスの。これは、メソッドがその型のパラメータを受け入れることを可能にしながら、その型の固定された有限個の不変インスタンスを持つ方法です。

次のコードはC#6.0で有効です。

public class Command 
{ 
    private Command(string value) 
    { 
     Value = value; 
    } 

    public string Value { get; private set; } 

    public static Command SET_STB_MEDIA_CTRL { get; } = new Command("SET STB MEDIA CTRL "); 
    public static Command ECHO { get; } = new Command("ECHO"); 
    public static Command SET_CHANNEL { get; } = new Command("SET CHANNEL "); 
    public static Command GET_VOLUMN { get; } = new Command("GET VOLUMN"); 
    public static Command GET_MAX_VOLUMN { get; } = new Command("GET MAX VOLUMN "); 
    public static Command SET_STB_MEDIA_LIST { get; } = new Command("SET STB MEDIA LIST "); 
} 
+0

それらを読み取り専用にすることを忘れないでください! –

+0

@ DanielA.White、ゲッターのみのプロパティなので、自動的に読み取り専用です – GreatAndPowerfulOz

+0

ああ、これはC#6であることに気が付きませんでした@ –