编程语言
首页 > 编程语言> > c#-应该将这种(通用范围类)条件逻辑替换为多态吗?如果是,那为什么呢?

c#-应该将这种(通用范围类)条件逻辑替换为多态吗?如果是,那为什么呢?

作者:互联网

下面显示的是通用范围类.这样做的目的是保存一个范围,然后在请求时稍后指定(布尔值)是否给定值在范围内.

我已阅读多个帖子,问题,博客等,内容为“ Replace Conditional with Polymorphism

我的问题是,真的值得将代码分成多个类,其中每个类从字面上看都是一行代码.希望下面的代码能显示我的意思.

该类还依赖于另外两个类,这里​​没有显示,但是如果有人需要它,我可以在以后包括它.

namespace Common.Utilities
{
    public class GenericRange<T>
       where T : struct, IComparable<T>
   {
      #region Properties
      public T Min { get; private set; }
      public T Max { get; private set; }
      public GenericRangeType RangeType { get; private set; }
      #endregion

      #region Constructors
      public GenericRange(T min, T max, GenericRangeType rangeType = GenericRangeType.Inclusive)
      {
         // Check Parameters
         Min = min;
         Max = max;
         RangeType = rangeType;
      }
      #endregion

      #region Methods
      #region Private
      private bool IsInclusive(T value)
      {
         return value.IsGreaterThanOrEqualTo(Min) && value.IsLessThanOrEqualTo(Max);
      }

      private bool IsInclusiveMin(T value)
      {
         return value.IsGreaterThanOrEqualTo(Min) && value.IsLessThan(Max);
      }

      private bool IsInclusiveMax(T value)
      {
         return value.IsGreaterThan(Min) && value.IsLessThanOrEqualTo(Max);
      }

      private bool IsExclusive(T value)
      {
         return value.IsGreaterThan(Min) && value.IsLessThan(Max);
      }
      #endregion

      #region Public
      public bool Contains(T value)
      {
         switch (RangeType)
         {
            case GenericRangeType.Inclusive: return IsInclusive(value);
            case GenericRangeType.InclusiveMin: return IsInclusiveMin(value);
            case GenericRangeType.InclusiveMax: return IsInclusiveMax(value);
            case GenericRangeType.Exclusive: return IsExclusive(value);
            default: throw new NotImplementedException();
         }
      }

      public override string ToString()
      {
         return String.Format("Min: {0}, Max: {1}, Type: {2}", Min, Max, RangeType);
      }
      #endregion
      #endregion
    }
}

唯一的Public方法是:Contain和ToString.
  如果我通过多态性正确理解了它,那么应该为每种比较类型创建一个单独的具体类,然后将其包含一个虚方法.

我主要要了解的是,好处/优点是什么?

如果这是这个问题的错误发源地,那么对不起.让我知道,我将移动它.

编辑1:
  如果有人需要的话,可以完成此操作的附加代码:

public static class ComparableExtensions
{
    public static bool IsEqualTo<T>(this T leftHand, T value) where T : IComparable<T>
    {
        return leftHand.CompareTo(value) == 0;
   }

    public static bool IsGreaterThan<T>(this T leftHand, T value) where T : IComparable<T>
    {
        return leftHand.CompareTo(value) > 0;
    }
    public static bool IsGreaterThanOrEqualTo<T>(this T leftHand, T value) where T : IComparable<T>
    {
        return leftHand.CompareTo(value) >= 0;
    }

    public static bool IsLessThan<T>(this T leftHand, T value) where T : IComparable<T>
    {
        return leftHand.CompareTo(value) < 0;
    }
    public static bool IsLessThanOrEqualTo<T>(this T leftHand, T value) where T : IComparable<T>
    {
        return leftHand.CompareTo(value) <= 0;
    }
}   

public enum GenericRangeType
{
    Inclusive,
    Exclusive,
    InclusiveMin,
    InclusiveMax
}

解决方法:

将其分为不同的类可以使您扩展Contains,而无需更改现有代码.在这种情况下,没有什么太大的意义,因为您已经在这里涵盖了包含的所有基础,但是在其他情况下,可扩展性可能非常有用.

标签:oop,if-statement,generics,switch-statement,c
来源: https://codeday.me/bug/20191201/2080531.html