public ZoneClusterMemberConsumption(
            BaseZoneClusterConsumption parentBaseZoneClusterConsumption,
            Func <ZoneInfoFinder> createZoneInfoFinderFunc,
            string name,
            int relativeToParentCenterX,
            int relativeToParentCenterY,
            Color color,
            int positionInClusterX,
            int positionInClusterY
            )
        {
            if (name == null)
            {
                throw new ArgumentNullException(nameof(name));
            }
            if (parentBaseZoneClusterConsumption == null)
            {
                throw new ArgumentNullException(nameof(parentBaseZoneClusterConsumption));
            }

            ParentBaseZoneClusterConsumption = parentBaseZoneClusterConsumption;
            Name = name;
            RelativeToParentCenterX = relativeToParentCenterX;
            RelativeToParentCenterY = relativeToParentCenterY;
            Color = color;
            PositionInClusterX = positionInClusterX;
            PositionInClusterY = positionInClusterY;

            _zoneInfoFinder   = createZoneInfoFinderFunc();
            PositionInCluster = new Point(PositionInClusterX - 1, PositionInClusterY - 1);
        }
        protected BaseNetworkZoneConsumption(ZoneInfoFinder neighborNavigator)
        {
            if (neighborNavigator == null)
            {
                throw new ArgumentNullException(nameof(neighborNavigator));
            }

            NeighborNavigator = neighborNavigator;
        }
        public IntersectingZoneConsumption(ZoneInfoFinder zoneInfoFinder, BaseInfrastructureNetworkZoneConsumption eastWestZoneConsumption, BaseInfrastructureNetworkZoneConsumption northSouthZoneConsumption)
        {
            if (eastWestZoneConsumption == null)
            {
                throw new ArgumentNullException(nameof(eastWestZoneConsumption));
            }
            if (northSouthZoneConsumption == null)
            {
                throw new ArgumentNullException(nameof(northSouthZoneConsumption));
            }

            if (eastWestZoneConsumption.GetType() == northSouthZoneConsumption.GetType())
            {
                throw new InvalidOperationException("An intersecting zone consumption must consist of two differing types.");
            }

            _zoneInfoFinder           = zoneInfoFinder ?? throw new ArgumentNullException(nameof(zoneInfoFinder));
            EastWestZoneConsumption   = eastWestZoneConsumption;
            NorthSouthZoneConsumption = northSouthZoneConsumption;
        }
 protected BaseInfrastructureNetworkZoneConsumption(ZoneInfoFinder neighborNavigator)
     : base(neighborNavigator)
 {
 }