2013-05-19 64 views
1

我正在嘗試開發一個輕客戶機/服務器程序。 「管理員」程序應能夠將常用命令發送到安裝了客戶端程序的多個本地客戶機。你可以有一個字符串屬性的枚舉?

我有一個枚舉控制的常用命令,像這樣:

public enum Command 
{ 
    Reboot, 
    StartService, 
    ShowMsg 
} 

有了,我可以從管理程序發送命令是這樣的:

Command.Reboot 

而且在客戶端程序,我可以有一個switch語句來執行該命令所要求的內容。

但是,對於枚舉的某些部分,我需要一個字符串屬性來發送這個。

從管理程序一樣,我想送點東西是這樣的:

Command.ShowMsg("Hi, this is a string message") 

如何做到這一點?我希望你能理解我的問題。

+0

它是否必須是枚舉?我會用一個類來做這件事,用你當前枚舉的enum屬性和一個字符串,這對重新啓動是null,你可以在它不是時指定它。 –

+0

不一定是enum。你能告訴我如何上課嗎? – user1281991

+0

當然,我會這麼做的。 –

回答

1

你可以有一個類,其中包含枚舉,像這樣:

enum CommandType 
{ 
    Reboot, 
    StartService, 
    ShowMsg 
} 
[DataContract] 
class Command 
{ 
    [DataMember] 
    public CommandType CmdType 
    { 
     get; 
     set; 
    } 
    [DataMember] 
    public string Value 
    { 
     get; 
     set; 
    } 
    public CommandType(CommandType cmd, string value = null) 
    { 
     CmdType = cmd; 
     Value = value; 
    } 
} 

,然後在需要的時候只是用它是這樣的:

new Command(CommandType.ShowMsg, "Hi, this is a string message."); 
+1

爲了在合約中使用此對象作爲參數,您需要指定字段/屬性的序列化。用[DataContract]屬性和你的兩個屬性用[DataMember]屬性裝飾你的類。當你使用它的時候,你也可以使用這些屬性名稱。 :) – IsNull

+0

@IsNull謝謝!會做:) –

+0

這完全是我想要的:)非常感謝你! – user1281991

0

我會做這樣一類。

public class ServiceObject{ 

public String command {get;set;} 
public String message {get;set;} 

    public ServiceObject(String command,String message){ 
    this.command = command; 
    if(message!=null) 
    this.message = message; 

    } 

} 

你會做

new ServiceObject("ShowMessage","This is a Service Object"); 

new ServiceObject("Restart",null); 

現在在你的服務器端建立這個obeject只是接受服務對象

您可以通過執行檢查其屬性ServiceObject.commandServiceObject.message

+0

感謝您的建議。雖然我不喜歡那個人必須寫我們的命令。 你可以很容易地拼錯命令,它仍然會編譯,但會在使用時出錯。例如 例如。新的ServiceObject(「Restarr」,null); < - 拼寫錯誤,將編譯 例如。 Command.Restart; < - 不能拼寫錯誤並且不會編譯 – user1281991

+0

是的,但是與我的解決方案不同的是,您只需修改一個代碼即可,這是最佳選擇。您只需將新功能添加到服務器解決方案中即可使用它。有很多工具可以解決同樣的問題。問題是哪一個更適合你。 –

相關問題