2012-09-19 90 views
2

我有以下隱藏枚舉值

public enum MessageType 
{ 
    Warning, 
    Info, 
    Error 
} 

public class CalculationMessage 
{ 
    public string Message { get; set; } 

    public MessageType Type { get; set; } 

} 

public class ValidationMessage 
{ 
    public string Message { get; set; } 

    public MessageType Type { get; set; } 

    public string ErrorValue { get; set; } 
} 

我想創建從兩個類都派生的基類,但是我有枚舉問題作爲ValidationMessage可錯誤/警告/信息但CalculationMessage只能是警告或信息。

這最好的實現方式是什麼?

在此先感謝。

+2

定義兩個枚舉...你不能'限制'一個枚舉的值。也許你可以嘗試添加一個私有setter到屬性並添加一個方法,如SetMessageType(MessageType Type)來設置值。 – Cybermaxs

+0

Enums + OO混合不好。如果你想要任何適用於任何類型的基類消息的功能(比如說基於消息類型的路由),你需要這些額外的枚舉類型。如果我是我,我會做一個字符串並完成它。但是,我認爲枚舉一般只用於邊際收益。 – dkackman

回答

3

你可以在二傳手添加參數驗證:

set 
{ 
    if(value == MessageType.Warning || value == MessageType.Info) 
    { 
    this.messageType = value; 
    } 
    else 
    { 
    throw new ArgumentOutOfRangeException(); 
    } 
} 

這一點,但是,違反了里氏替換原則的。因此,要小心並考慮是否可能有解決辦法(例如,根本不公開制定公衆意見,但在內部確定MessageType)。

+0

感謝您的幫助,這是我在挖掘過程中找到的答案,但我想確認一下。 – user1683465