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はError / Warning / Infoである可能性がありますが、CalculationMessageはWarningまたはInfoである可能性があるため、列挙型に問題があります。

これはどのように最もよく達成されますか?

前もって感謝します。

4

1 に答える 1

3

セッターにパラメーター検証を追加できます。

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

ただし、これはリスコフの置換原則に違反しています。したがって、注意して回避策があるかどうかを検討してください (たとえば、setter をまったく公開せず、MessageType内部で決定するなど)。

于 2012-09-19T15:21:34.927 に答える