2012-09-19 72 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